@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
@@ -1751,7 +1751,16 @@ var ENDPOINT_DEFINITIONS = {
1751
1751
  revalidate: 60,
1752
1752
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1753
1753
  auth: "user",
1754
- responseKind: "json"
1754
+ responseKind: "json",
1755
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1756
+ },
1757
+ reorderContentEntries: {
1758
+ path: "/sites/{siteId}/content/{type}/order",
1759
+ method: "POST",
1760
+ tags: ["site-{siteId}", "content-{siteId}-{type}"],
1761
+ auth: "user",
1762
+ responseKind: "json",
1763
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1755
1764
  },
1756
1765
  getContentTemplate: {
1757
1766
  path: "/sites/{siteId}/content/types/{type}/template",
@@ -2143,6 +2152,46 @@ var ENDPOINT_DEFINITIONS = {
2143
2152
  auth: "user",
2144
2153
  responseKind: "json"
2145
2154
  },
2155
+ getSiteIconStyleGuide: {
2156
+ path: "/sites/{siteId}/settings/icon-style-guide",
2157
+ method: "GET",
2158
+ revalidate: 120,
2159
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2160
+ auth: "user",
2161
+ responseKind: "json",
2162
+ errors: []
2163
+ },
2164
+ updateSiteIconStyleGuide: {
2165
+ path: "/sites/{siteId}/settings/icon-style-guide",
2166
+ method: "POST",
2167
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2168
+ auth: "user",
2169
+ responseKind: "json",
2170
+ errors: []
2171
+ },
2172
+ regenerateSiteIconStyleGuide: {
2173
+ path: "/sites/{siteId}/settings/icon-style-guide/regenerate",
2174
+ method: "POST",
2175
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2176
+ auth: "user",
2177
+ responseKind: "json",
2178
+ errors: []
2179
+ },
2180
+ generateGeneratedIconSet: {
2181
+ path: "/sites/{siteId}/ai/generated-icons/generate",
2182
+ method: "POST",
2183
+ auth: "user",
2184
+ responseKind: "json",
2185
+ errors: []
2186
+ },
2187
+ applyGeneratedIconSet: {
2188
+ path: "/sites/{siteId}/ai/generated-icons/apply",
2189
+ method: "POST",
2190
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2191
+ auth: "user",
2192
+ responseKind: "json",
2193
+ errors: []
2194
+ },
2146
2195
  getSiteAiProfile: {
2147
2196
  path: "/sites/{siteId}/settings/ai-site-profile",
2148
2197
  method: "GET",
@@ -3918,6 +3967,14 @@ var ENDPOINT_DEFINITIONS = {
3918
3967
  auth: "public",
3919
3968
  responseKind: "json"
3920
3969
  },
3970
+ getGeneratedIconRenderAssets: {
3971
+ path: "/public/sites/{siteId}/generated-icon-assets",
3972
+ method: "POST",
3973
+ tags: [TAG_TEMPLATES.siteRoutableContent],
3974
+ auth: "public",
3975
+ responseKind: "json",
3976
+ errors: []
3977
+ },
3921
3978
  // Resolve entry subroute by kind and URL segment
3922
3979
  resolveEntrySubroute: {
3923
3980
  path: "/public/sites/{siteId}/routing/subroutes/resolve",
@@ -5622,6 +5679,13 @@ var ENDPOINT_DEFINITIONS = {
5622
5679
  auth: "service",
5623
5680
  responseKind: "json"
5624
5681
  },
5682
+ sdkDeleteNavigationMenu: {
5683
+ path: "/sdk/{siteId}/navigation/{menuId}",
5684
+ method: "DELETE",
5685
+ auth: "service",
5686
+ responseKind: "json",
5687
+ errors: ["resource:not_found", "server:internal_error"]
5688
+ },
5625
5689
  sdkUpsertTheme: {
5626
5690
  path: "/sdk/{siteId}/theme",
5627
5691
  method: "POST",
@@ -6284,6 +6348,20 @@ var managedDomainAddOnPricingSnapshotSchema = z.object({
6284
6348
  monthlyCurrency: z.literal("gbp")
6285
6349
  });
6286
6350
 
6351
+ // ../api/src/media.ts
6352
+ var AMBIENT_BACKGROUND_ROLES = [
6353
+ "light-texture",
6354
+ "proof-band-dark",
6355
+ "cta-wash",
6356
+ "footer-detail",
6357
+ "style-atmosphere-1",
6358
+ "style-atmosphere-2"
6359
+ ];
6360
+ var SITE_BACKGROUND_ASSET_USES = [
6361
+ "selected-background",
6362
+ ...AMBIENT_BACKGROUND_ROLES
6363
+ ];
6364
+
6287
6365
  // ../api/src/navigation/contracts.ts
6288
6366
  import { z as z2 } from "zod";
6289
6367
  var portalLinkPayloadSchema = z2.object({
@@ -6495,14 +6573,14 @@ function rotateNormalizedPoint(point, rotation) {
6495
6573
  const x = point.x;
6496
6574
  const y = point.y;
6497
6575
  switch (rotation) {
6576
+ case 0:
6577
+ return { x, y };
6498
6578
  case 90:
6499
6579
  return { x: 1 - y, y: x };
6500
6580
  case 180:
6501
6581
  return { x: 1 - x, y: 1 - y };
6502
6582
  case 270:
6503
6583
  return { x: y, y: 1 - x };
6504
- default:
6505
- return { x, y };
6506
6584
  }
6507
6585
  }
6508
6586
 
@@ -6717,6 +6795,9 @@ function resolveRepeaterGridColumnFieldId(options) {
6717
6795
  return asNonEmptyString(options?.id) ?? DEFAULT_REPEATER_GRID_COLUMN_FIELD_ID;
6718
6796
  }
6719
6797
 
6798
+ // ../blocks/src/system/icons/presets.ts
6799
+ var ICON_PICKER_PRESETS = ["cta", "feature"];
6800
+
6720
6801
  // ../blocks/src/system/manifest/schema.ts
6721
6802
  var visibilityLevels = ["admin", "designer", "author"];
6722
6803
  var MEDIA_KINDS = [
@@ -6795,6 +6876,8 @@ var uiSchema = z4.object({
6795
6876
  mediaPickerAutoOpen: z4.boolean().optional(),
6796
6877
  showMediaPreview: z4.boolean().optional(),
6797
6878
  showMediaOverlayActions: z4.boolean().optional(),
6879
+ mediaPreviewMaxWidth: z4.enum(["xs", "sm", "md", "none"]).optional(),
6880
+ preventMediaPreviewUpscale: z4.boolean().optional(),
6798
6881
  mediaDelivery: mediaDeliverySchema.optional(),
6799
6882
  mediaDeliveryByVariant: z4.record(z4.string(), mediaDeliverySchema).optional(),
6800
6883
  // Optional input hints for validators/widgets
@@ -6873,7 +6956,7 @@ var uiSchema = z4.object({
6873
6956
  layoutGridColumnField: z4.string().optional(),
6874
6957
  layoutGridMaxRows: z4.number().int().positive().optional(),
6875
6958
  // Icon picker configuration (used when ui.widget === 'iconPicker')
6876
- iconPickerPreset: z4.enum(["cta"]).optional(),
6959
+ iconPickerPreset: z4.enum(ICON_PICKER_PRESETS).optional(),
6877
6960
  // Entry picker configuration
6878
6961
  contentTypeField: z4.string().optional(),
6879
6962
  fixedContentType: z4.string().optional(),
@@ -7044,6 +7127,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
7044
7127
  type: z4.literal("repeater"),
7045
7128
  itemLabel: z4.string().default("Item"),
7046
7129
  itemLabelSource: z4.string().optional(),
7130
+ showSummary: z4.boolean().optional(),
7131
+ summaryFields: z4.string().array().optional(),
7132
+ summaryMaxChars: z4.number().int().positive().optional(),
7047
7133
  minItems: z4.number().int().min(0).default(0),
7048
7134
  maxItems: z4.number().int().positive().optional(),
7049
7135
  // Monomorphic mode
@@ -8536,7 +8622,7 @@ var themeColorBaseTokenNames = [
8536
8622
  "accentForeground"
8537
8623
  ];
8538
8624
  var themeColorBaseTokenSet = new Set(themeColorBaseTokenNames);
8539
- var SHADE_STEPS = [
8625
+ var themeColorShadeSteps = [
8540
8626
  "50",
8541
8627
  "100",
8542
8628
  "200",
@@ -8549,7 +8635,7 @@ var SHADE_STEPS = [
8549
8635
  "900",
8550
8636
  "950"
8551
8637
  ];
8552
- var shadeStepSet = new Set(SHADE_STEPS);
8638
+ var shadeStepSet = new Set(themeColorShadeSteps);
8553
8639
  function isKnownBaseToken(value) {
8554
8640
  return themeColorBaseTokenSet.has(value);
8555
8641
  }
@@ -12250,6 +12336,7 @@ var curatedSiteStyleIdValues = [
12250
12336
  "site-style:personal-retreat-journal",
12251
12337
  "site-style:tactile-workshop",
12252
12338
  "site-style:modern-wellness",
12339
+ "site-style:clarity-zen-blue",
12253
12340
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
12254
12341
  "site-style:bold-launch",
12255
12342
  "site-style:south-west-twerk-school"
@@ -12835,6 +12922,114 @@ var curatedSiteStyles = [
12835
12922
  paletteChoice("warm-neutral-clay")
12836
12923
  ]
12837
12924
  }),
12925
+ defineCuratedSiteStyle({
12926
+ id: "site-style:clarity-zen-blue",
12927
+ name: "Clarity Zen",
12928
+ description: "Calm, editorial, and reassuring for therapy, counselling, and wellbeing support practices.",
12929
+ 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.",
12930
+ siteCreatorSelection: {
12931
+ kind: "site_creator_keyword_heuristic",
12932
+ priority: 25
12933
+ },
12934
+ selectionKeywordRules: [
12935
+ { kind: "substring", value: "psychotherap" },
12936
+ { kind: "phrase", value: "mental health" },
12937
+ { kind: "phrase", value: "talk therapy" },
12938
+ { kind: "phrase", value: "therapy and wellbeing" }
12939
+ ],
12940
+ tokenRecipes: {
12941
+ palette: "brand-led",
12942
+ contrast: "standard",
12943
+ radius: "rounded",
12944
+ shadow: "subtle",
12945
+ typography: "serif-editorial",
12946
+ spacing: "airy",
12947
+ motion: "subtle"
12948
+ },
12949
+ compositionBudget: balancedBudget,
12950
+ themeOverrides: {
12951
+ typography: {
12952
+ body: {
12953
+ family: "Inter, system-ui, sans-serif",
12954
+ size: "md",
12955
+ weight: "regular",
12956
+ lineHeight: "relaxed",
12957
+ letterSpacing: "normal"
12958
+ },
12959
+ headings: {
12960
+ default: {
12961
+ family: '"Cormorant Garamond", Georgia, serif',
12962
+ weight: "regular",
12963
+ lineHeight: "normal",
12964
+ letterSpacing: "normal",
12965
+ colorToken: "text",
12966
+ italic: null,
12967
+ case: null
12968
+ },
12969
+ h1: {
12970
+ size: "xl",
12971
+ weight: "regular",
12972
+ lineHeight: "normal",
12973
+ letterSpacing: "normal",
12974
+ italic: null
12975
+ },
12976
+ h2: {
12977
+ size: "lg",
12978
+ weight: "regular",
12979
+ lineHeight: "normal",
12980
+ letterSpacing: "normal",
12981
+ italic: null
12982
+ },
12983
+ h3: {
12984
+ size: "md",
12985
+ weight: "regular",
12986
+ lineHeight: "normal",
12987
+ letterSpacing: "normal",
12988
+ italic: null
12989
+ }
12990
+ },
12991
+ scale: "majorThird"
12992
+ },
12993
+ bodyText: {
12994
+ intro: {
12995
+ paragraphSize: "default",
12996
+ headingSize: "editorial"
12997
+ }
12998
+ }
12999
+ },
13000
+ defaultBlockVariants: {
13001
+ "block.faq": "split-heading-columns"
13002
+ },
13003
+ recommendedAppearancePresetIds: [
13004
+ "hero-split-editorial",
13005
+ "intro-organic-statement",
13006
+ "feature-cards-raised-rule",
13007
+ "media-text-quiet-story",
13008
+ "testimonials-brand-background-quotes",
13009
+ "faq-contained-help",
13010
+ "contact-form-panel"
13011
+ ],
13012
+ recommendedHeaderLookIds: [
13013
+ "centered-calm",
13014
+ "serif-line",
13015
+ "minimal-transparent"
13016
+ ],
13017
+ recommendedFooterLookIds: [
13018
+ "footer-muted-grounding",
13019
+ "site-footer-brand-two-band"
13020
+ ],
13021
+ buttonPersonalityChoices: [
13022
+ buttonChoice("soft-pill"),
13023
+ buttonChoice("pebble"),
13024
+ buttonChoice("editorial-link")
13025
+ ],
13026
+ paletteVariantChoices: [
13027
+ paletteChoice("brand-led-cool"),
13028
+ paletteChoice("soft-natural-watercolor"),
13029
+ paletteChoice("soft-natural-stone"),
13030
+ paletteChoice("warm-neutral-cream")
13031
+ ]
13032
+ }),
12838
13033
  defineCuratedSiteStyle({
12839
13034
  id: "site-style:personal-retreat-journal",
12840
13035
  name: "Personal Retreat Journal",
@@ -16088,47 +16283,48 @@ function validateFieldDefinitions(fields3, fragmentId) {
16088
16283
  function prefixFieldId(field, scope) {
16089
16284
  const cloned = cloneFieldDefinition2(field);
16090
16285
  cloned.id = `${scope}.${field.id}`;
16091
- cloned.defaultValue = cloneUnknown(cloned.defaultValue);
16286
+ const defaultValue = cloned.defaultValue;
16287
+ cloned.defaultValue = cloneUnknown(defaultValue);
16092
16288
  cloned.visibleRoles = cloned.visibleRoles ? [...cloned.visibleRoles] : void 0;
16093
16289
  cloned.ui = cloneUnknown(cloned.ui);
16094
16290
  return cloned;
16095
16291
  }
16096
16292
  function cloneFieldDefinition2(field) {
16097
- switch (field.type) {
16098
- case "repeater":
16099
- if (field.polymorphic && field.itemTypes) {
16100
- return {
16101
- ...field,
16102
- polymorphic: true,
16103
- itemTypes: Object.fromEntries(
16104
- Object.entries(field.itemTypes).map(([key, itemType]) => [
16105
- key,
16106
- {
16107
- ...itemType,
16108
- fields: itemType.fields.map(cloneFieldDefinition2)
16109
- }
16110
- ])
16111
- )
16112
- };
16113
- } else if (field.schema) {
16114
- return {
16115
- ...field,
16116
- schema: {
16117
- fields: field.schema.fields.map(cloneFieldDefinition2)
16118
- }
16119
- };
16120
- }
16121
- return { ...field };
16122
- case "group":
16293
+ if (field.type === "repeater") {
16294
+ if (field.polymorphic && field.itemTypes) {
16295
+ return {
16296
+ ...field,
16297
+ polymorphic: true,
16298
+ itemTypes: Object.fromEntries(
16299
+ Object.entries(field.itemTypes).map(([key, itemType]) => [
16300
+ key,
16301
+ {
16302
+ ...itemType,
16303
+ fields: itemType.fields.map(cloneFieldDefinition2)
16304
+ }
16305
+ ])
16306
+ )
16307
+ };
16308
+ }
16309
+ if (field.schema) {
16123
16310
  return {
16124
16311
  ...field,
16125
16312
  schema: {
16126
16313
  fields: field.schema.fields.map(cloneFieldDefinition2)
16127
16314
  }
16128
16315
  };
16129
- default:
16130
- return { ...field };
16316
+ }
16317
+ return { ...field };
16131
16318
  }
16319
+ if (field.type === "group") {
16320
+ return {
16321
+ ...field,
16322
+ schema: {
16323
+ fields: field.schema.fields.map(cloneFieldDefinition2)
16324
+ }
16325
+ };
16326
+ }
16327
+ return { ...field };
16132
16328
  }
16133
16329
  function cloneUnknown(value) {
16134
16330
  if (value == null || typeof value !== "object") {
@@ -16897,36 +17093,46 @@ function buildCarouselLayout() {
16897
17093
  [buildTestimonialCard(repeat("data.entries", "testimonial"))]
16898
17094
  );
16899
17095
  }
17096
+ function buildResponsiveGridCards() {
17097
+ return [
17098
+ // 2 columns
17099
+ grid(
17100
+ { gap: "lg", cols: { base: 1, sm: 2 } },
17101
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17102
+ when("gridColumns", { equals: "2" })
17103
+ ),
17104
+ // 3 columns (default when unset)
17105
+ grid(
17106
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
17107
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17108
+ when("gridColumns", { equals: "3" })
17109
+ ),
17110
+ // 4 columns
17111
+ grid(
17112
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
17113
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17114
+ when("gridColumns", { equals: "4" })
17115
+ ),
17116
+ // Fallback to 3 columns when gridColumns is not set
17117
+ grid(
17118
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
17119
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17120
+ when("gridColumns", { not: true })
17121
+ )
17122
+ ];
17123
+ }
16900
17124
  function buildGridLayout() {
16901
17125
  return el(
16902
17126
  "div",
16903
17127
  { className: "rb-mt-12 rb-testimonials-carousel" },
16904
- [
16905
- // 2 columns
16906
- grid(
16907
- { gap: "lg", cols: { base: 1, sm: 2 } },
16908
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16909
- when("gridColumns", { equals: "2" })
16910
- ),
16911
- // 3 columns (default when unset)
16912
- grid(
16913
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
16914
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16915
- when("gridColumns", { equals: "3" })
16916
- ),
16917
- // 4 columns
16918
- grid(
16919
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
16920
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16921
- when("gridColumns", { equals: "4" })
16922
- ),
16923
- // Fallback to 3 columns when gridColumns is not set
16924
- grid(
16925
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
16926
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16927
- when("gridColumns", { not: true })
16928
- )
16929
- ]
17128
+ buildResponsiveGridCards()
17129
+ );
17130
+ }
17131
+ function buildGridCardsLayout(className) {
17132
+ return el(
17133
+ "div",
17134
+ { className },
17135
+ buildResponsiveGridCards()
16930
17136
  );
16931
17137
  }
16932
17138
  var testimonialsCarouselFragment = defineFragment({
@@ -18471,7 +18677,8 @@ function createBlockManifestWithContentShape(config, _contentShape) {
18471
18677
  return createBlockManifest(config);
18472
18678
  }
18473
18679
  function normalizeBlockLayout(layout) {
18474
- return Array.isArray(layout) ? [...layout] : layout;
18680
+ const rawLayout = layout;
18681
+ return Array.isArray(rawLayout) ? rawLayout : rawLayout;
18475
18682
  }
18476
18683
  function deriveComponentName(id) {
18477
18684
  const base = id.replace(/^block\./, "");
@@ -19894,6 +20101,24 @@ var questionColumnsLayout = styledSection({
19894
20101
  }),
19895
20102
  baseClass: ""
19896
20103
  });
20104
+ var splitHeadingColumnsLayout = styledSection({
20105
+ children: styledContainer({
20106
+ baseClassName: "rb-relative rb-isolate",
20107
+ children: el(
20108
+ "div",
20109
+ {
20110
+ className: "rb-faq-split-heading-columns rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
20111
+ },
20112
+ [
20113
+ el("div", { className: "rb-faq-split-heading-columns-copy" }, [headingLayout]),
20114
+ el("div", { className: "rb-faq-split-heading-columns-accordion" }, [
20115
+ questionColumnsAccordionLayout
20116
+ ])
20117
+ ]
20118
+ )
20119
+ }),
20120
+ baseClass: ""
20121
+ });
19897
20122
  var faqManifest = createBlockManifest({
19898
20123
  id: "block.faq",
19899
20124
  title: "FAQ",
@@ -19914,7 +20139,8 @@ var faqManifest = createBlockManifest({
19914
20139
  variants: {
19915
20140
  default: defaultLayout,
19916
20141
  "two-column": twoColumnLayout,
19917
- "question-columns": questionColumnsLayout
20142
+ "question-columns": questionColumnsLayout,
20143
+ "split-heading-columns": splitHeadingColumnsLayout
19918
20144
  },
19919
20145
  defaultVariant: "default",
19920
20146
  variantOptions: {
@@ -19929,6 +20155,10 @@ var faqManifest = createBlockManifest({
19929
20155
  "question-columns": {
19930
20156
  label: "Question columns",
19931
20157
  description: "A full-width heading above FAQ items split into two columns."
20158
+ },
20159
+ "split-heading-columns": {
20160
+ label: "Split heading columns",
20161
+ description: "A left heading column with FAQ items split into two columns on the right."
19932
20162
  }
19933
20163
  },
19934
20164
  description: "Accordion of frequently asked questions and answers.",
@@ -20017,16 +20247,20 @@ var marqueeLoopTransform = {
20017
20247
  summary: "Repeat an array to a minimum length, then duplicate it for seamless marquee looping",
20018
20248
  schema: marqueeLoopOptionsSchema,
20019
20249
  run: (value, options) => {
20020
- if (!Array.isArray(value) || value.length === 0) return [];
20250
+ const items = toUnknownArray(value);
20251
+ if (items.length === 0) return [];
20021
20252
  const minItems = options?.minItems ?? 10;
20022
20253
  const base = [];
20023
20254
  while (base.length < minItems) {
20024
- base.push(...value);
20255
+ base.push(...items);
20025
20256
  if (base.length > 1e3) break;
20026
20257
  }
20027
20258
  return [...base, ...base];
20028
20259
  }
20029
20260
  };
20261
+ function toUnknownArray(value) {
20262
+ return Array.isArray(value) ? value : [];
20263
+ }
20030
20264
  var formattingTransforms = [
20031
20265
  uppercaseTransform,
20032
20266
  fallbackTransform,
@@ -22006,6 +22240,7 @@ var siteFooterBlockDefinition = {
22006
22240
  };
22007
22241
 
22008
22242
  // ../blocks/src/system/blocks/testimonials.tsx
22243
+ var backgroundImageClassName = "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-object-cover rb-opacity-50";
22009
22244
  var wrapVariant = (variantLayout) => styledSection({
22010
22245
  children: styledContainer({
22011
22246
  children: stack(
@@ -22019,10 +22254,53 @@ var wrapVariant = (variantLayout) => styledSection({
22019
22254
  // styledContainer (rb-container) already provides horizontal padding
22020
22255
  baseClass: "",
22021
22256
  spacing: "comfortable",
22022
- imageClassName: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-object-cover rb-opacity-50"
22257
+ imageClassName: backgroundImageClassName
22023
22258
  });
22024
22259
  var carouselLayout = wrapVariant(buildCarouselLayout());
22025
22260
  var gridLayout2 = wrapVariant(buildGridLayout());
22261
+ var splitHeading = stack(
22262
+ { gap: "md", className: "rb-testimonials-split-heading-copy rb-max-w-xl" },
22263
+ [
22264
+ text(
22265
+ { as: "h2" },
22266
+ when("content.heading"),
22267
+ bind("content.heading")
22268
+ ),
22269
+ headingDecoration({
22270
+ family: "short-center-rule",
22271
+ placement: "after-heading"
22272
+ }),
22273
+ text(
22274
+ {
22275
+ as: "p",
22276
+ className: "rb-prose",
22277
+ style: textColorStyle("mutedText")
22278
+ },
22279
+ when("content.subheading"),
22280
+ bind("content.subheading")
22281
+ )
22282
+ ]
22283
+ );
22284
+ var splitGridLayout = styledSection({
22285
+ children: styledContainer({
22286
+ baseClassName: "rb-relative rb-isolate",
22287
+ children: el(
22288
+ "div",
22289
+ {
22290
+ className: "rb-testimonials-split-grid rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
22291
+ },
22292
+ [
22293
+ el("div", { className: "rb-testimonials-split-grid-heading" }, [splitHeading]),
22294
+ el("div", { className: "rb-testimonials-split-grid-cards" }, [
22295
+ buildGridCardsLayout("rb-testimonials-split-grid-card-list")
22296
+ ])
22297
+ ]
22298
+ )
22299
+ }),
22300
+ baseClass: "",
22301
+ spacing: "comfortable",
22302
+ imageClassName: backgroundImageClassName
22303
+ });
22026
22304
  var additionalFields = parseFieldDefinitions([
22027
22305
  // Heading fields from fragment
22028
22306
  ...testimonialsHeadingFragment.fields,
@@ -22054,7 +22332,7 @@ var additionalFields = parseFieldDefinitions([
22054
22332
  ],
22055
22333
  ui: {
22056
22334
  intent: "display",
22057
- visibleWhen: { field: "variant", equals: "grid" }
22335
+ visibleWhen: { field: "variant", oneOf: ["grid", "split-grid"] }
22058
22336
  }
22059
22337
  },
22060
22338
  // Carousel-specific fields (from fragment)
@@ -22088,7 +22366,8 @@ var testimonialsManifest = createBlockManifest({
22088
22366
  // Variant system - enables the variant switcher control in the editor
22089
22367
  variants: {
22090
22368
  carousel: carouselLayout,
22091
- grid: gridLayout2
22369
+ grid: gridLayout2,
22370
+ "split-grid": splitGridLayout
22092
22371
  },
22093
22372
  defaultVariant: "carousel",
22094
22373
  variantOptions: {
@@ -22101,6 +22380,11 @@ var testimonialsManifest = createBlockManifest({
22101
22380
  label: "Grid",
22102
22381
  description: "Responsive grid layout",
22103
22382
  icon: "Grid"
22383
+ },
22384
+ "split-grid": {
22385
+ label: "Split grid",
22386
+ description: "Heading on the left with testimonial cards on the right",
22387
+ icon: "PanelLeft"
22104
22388
  }
22105
22389
  },
22106
22390
  // Fields (variant field is auto-generated by augmentManifest)
@@ -22493,6 +22777,13 @@ var collectionBlockDefinition = {
22493
22777
  manifest: collectionManifest
22494
22778
  };
22495
22779
 
22780
+ // ../blocks/src/system/blocks/feature-card-icons.ts
22781
+ var FEATURE_CARD_ICON_TREATMENTS = [
22782
+ "plain",
22783
+ "soft-badge",
22784
+ "utility-badge"
22785
+ ];
22786
+
22496
22787
  // ../blocks/src/system/blocks/feature-cards.ts
22497
22788
  function grid3(props2, children) {
22498
22789
  return el("grid", props2 ?? void 0, children ?? void 0);
@@ -22535,6 +22826,15 @@ var featureCard = styledCard(
22535
22826
  bind("card.media")
22536
22827
  ),
22537
22828
  stack({ gap: "sm", className: "rb-feature-card-content rb-flex-1 rb-p-6" }, [
22829
+ el(
22830
+ "feature-card-icon",
22831
+ {
22832
+ treatment: { $bind: { from: "content._iconTreatment", fallback: "soft-badge" } },
22833
+ generatedAssets: { $bind: { from: "data.generatedIconAssets" } }
22834
+ },
22835
+ null,
22836
+ bind("card.icon")
22837
+ ),
22538
22838
  text(
22539
22839
  {
22540
22840
  as: "h3",
@@ -22656,6 +22956,16 @@ var featureCardsConfig = {
22656
22956
  defaultValue: "4/3",
22657
22957
  visibleWhen: { field: "media", notEquals: null }
22658
22958
  }),
22959
+ {
22960
+ id: "icon",
22961
+ type: "text",
22962
+ label: "Icon",
22963
+ required: false,
22964
+ ui: {
22965
+ widget: "iconPicker",
22966
+ iconPickerPreset: "feature"
22967
+ }
22968
+ },
22659
22969
  {
22660
22970
  id: "title",
22661
22971
  type: "text",
@@ -22691,6 +23001,19 @@ var featureCardsConfig = {
22691
23001
  ]
22692
23002
  }
22693
23003
  },
23004
+ {
23005
+ id: "_iconTreatment",
23006
+ type: "select",
23007
+ label: "Icon style",
23008
+ required: false,
23009
+ defaultValue: "soft-badge",
23010
+ multiple: false,
23011
+ options: FEATURE_CARD_ICON_TREATMENTS.map((value) => ({
23012
+ value,
23013
+ label: value === "plain" ? "Plain" : value === "soft-badge" ? "Soft badge" : "Utility badge"
23014
+ })),
23015
+ ui: { intent: "display" }
23016
+ },
22694
23017
  cardStylesField({
22695
23018
  id: "_cardStyles",
22696
23019
  label: "Card styles"
@@ -23693,8 +24016,8 @@ var eventSurfaceScopeValues = [
23693
24016
  "custom"
23694
24017
  ];
23695
24018
  var eventScheduleScopeValues = ["any", "recurring", "oneOff"];
23696
- var asEventCategoryId = (value) => value;
23697
- var asVenueId = (value) => value;
24019
+ var unsafeAsEventCategoryId = (value) => value;
24020
+ var unsafeAsVenueId = (value) => value;
23698
24021
  function normalizeEventBlockKind(value) {
23699
24022
  return value === "courses" || value === "events" ? value : "all";
23700
24023
  }
@@ -23720,10 +24043,10 @@ function normalizeEventCategoryIds(value) {
23720
24043
  if (Array.isArray(value)) {
23721
24044
  return normalizeIdList(
23722
24045
  value.filter((entry) => typeof entry === "string")
23723
- ).map(asEventCategoryId);
24046
+ ).map(unsafeAsEventCategoryId);
23724
24047
  }
23725
24048
  if (typeof value === "string") {
23726
- return normalizeIdList(value.split(",")).map(asEventCategoryId);
24049
+ return normalizeIdList(value.split(",")).map(unsafeAsEventCategoryId);
23727
24050
  }
23728
24051
  return [];
23729
24052
  }
@@ -23736,7 +24059,7 @@ function normalizeEventVenueId(value) {
23736
24059
  return null;
23737
24060
  }
23738
24061
  const trimmed = value.trim();
23739
- return trimmed ? asVenueId(trimmed) : null;
24062
+ return trimmed ? unsafeAsVenueId(trimmed) : null;
23740
24063
  }
23741
24064
  function normalizeEventStaffMemberId(value) {
23742
24065
  if (typeof value !== "string") {
@@ -30508,7 +30831,8 @@ var systemBlockDefinitionsRaw = [
30508
30831
  layoutProfiles: [
30509
30832
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
30510
30833
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
30511
- layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" })
30834
+ layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" }),
30835
+ layoutProfile({ variantKey: "split-heading-columns", family: "split", weight: "standard" })
30512
30836
  ]
30513
30837
  })),
30514
30838
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -30539,6 +30863,12 @@ var systemBlockDefinitionsRaw = [
30539
30863
  family: "grid",
30540
30864
  weight: "standard",
30541
30865
  bias: "soft"
30866
+ }),
30867
+ layoutProfile({
30868
+ variantKey: "split-grid",
30869
+ family: "split",
30870
+ weight: "featured",
30871
+ bias: "soft"
30542
30872
  })
30543
30873
  ]
30544
30874
  })),
@@ -33221,10 +33551,16 @@ var dashboardConfigSchema = z61.object({
33221
33551
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
33222
33552
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
33223
33553
  var sdkLoaderEndpointSchema = z61.enum(SUPPORTED_LOADER_ENDPOINTS);
33554
+ var loaderFallbackScalarSchema = z61.union([
33555
+ z61.string(),
33556
+ z61.number(),
33557
+ z61.boolean(),
33558
+ z61.null()
33559
+ ]);
33224
33560
  var loaderParamBindingSchema = z61.object({
33225
33561
  $bind: z61.object({
33226
33562
  from: z61.string().min(1, "Binding path is required"),
33227
- fallback: z61.string().optional()
33563
+ fallback: loaderFallbackScalarSchema.optional()
33228
33564
  })
33229
33565
  });
33230
33566
  var loaderParamValueSchema = z61.union([
@@ -33370,9 +33706,13 @@ var sdkBlockFieldOptionsMapSchema = z61.record(
33370
33706
  var sdkContentTypeTemplateConfigSchema = z61.object({
33371
33707
  blocks: z61.array(z61.unknown())
33372
33708
  }).passthrough();
33709
+ var sdkContentTypeOrderingConfigSchema = z61.object({
33710
+ mode: z61.enum(["default", "manual"]).optional()
33711
+ }).optional();
33373
33712
  var sdkContentTypeConfigSchema = z61.object({
33374
33713
  key: z61.string().min(1),
33375
33714
  fields: z61.array(z61.unknown()),
33715
+ ordering: sdkContentTypeOrderingConfigSchema,
33376
33716
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
33377
33717
  }).passthrough();
33378
33718
  var sdkContentConfigSchema = z61.object({
@@ -34258,7 +34598,6 @@ var websiteSurfaceIds = [
34258
34598
  "site.footerBlocks",
34259
34599
  "site.navigation",
34260
34600
  "site.media",
34261
- "site.style",
34262
34601
  "site.performance"
34263
34602
  ];
34264
34603
  var websiteSurfaceIdSet = new Set(
@@ -34279,6 +34618,12 @@ var hiddenDemoSettingsNavSurfaceIds = [
34279
34618
  ];
34280
34619
  var hiddenDemoSettingsNavIds = new Set(hiddenDemoSettingsNavSurfaceIds);
34281
34620
 
34621
+ // ../api/src/navigation/identity.ts
34622
+ function unsafeAsNavigationMenuIdentifier(identifier) {
34623
+ return identifier;
34624
+ }
34625
+ var MAIN_NAVIGATION_MENU_IDENTIFIER = unsafeAsNavigationMenuIdentifier("main");
34626
+
34282
34627
  // ../api/src/aiPlayground.ts
34283
34628
  import { z as z66 } from "zod";
34284
34629
  var Rfc6902PatchOp = z66.discriminatedUnion("op", [
@@ -34518,6 +34863,9 @@ var templateConfigSchemaForward = z67.object({
34518
34863
  })
34519
34864
  )
34520
34865
  }).optional();
34866
+ var contentTypeOrderingSchema = z67.object({
34867
+ mode: z67.enum(["default", "manual"]).optional()
34868
+ }).optional();
34521
34869
  var contentTypeConfigSchema = z67.object({
34522
34870
  key: contentTypeKeySchema,
34523
34871
  name: z67.string().min(1),
@@ -34527,6 +34875,7 @@ var contentTypeConfigSchema = z67.object({
34527
34875
  // Fields are validated as unknown[] here - deep field validation happens in @riverbankcms/blocks
34528
34876
  fields: z67.array(z67.any()).min(1, "At least one field is required"),
34529
34877
  titleField: z67.string().optional(),
34878
+ ordering: contentTypeOrderingSchema,
34530
34879
  isSingleton: z67.boolean().optional().default(false),
34531
34880
  template: templateConfigSchemaForward
34532
34881
  }).refine(
@@ -35058,7 +35407,7 @@ var loaderParamBindingSchema2 = z70.object({
35058
35407
  // Loader params are ultimately string-normalized for query strings, so fallbacks should
35059
35408
  // stay scalar. Use transforms (e.g. `value.jsonArray`) when you need to serialize
35060
35409
  // more complex values into a string.
35061
- fallback: z70.union([z70.string(), z70.number(), z70.boolean(), z70.null()]).optional(),
35410
+ fallback: loaderFallbackScalarSchema.optional(),
35062
35411
  transforms: z70.array(loaderTransformStepSchema).default([]),
35063
35412
  pick: z70.enum(["value", "collection", "context"]).default("value"),
35064
35413
  coerce: z70.enum(["number", "boolean", "string"]).optional()