@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
@@ -1755,7 +1755,16 @@ var ENDPOINT_DEFINITIONS = {
1755
1755
  revalidate: 60,
1756
1756
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1757
1757
  auth: "user",
1758
- responseKind: "json"
1758
+ responseKind: "json",
1759
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1760
+ },
1761
+ reorderContentEntries: {
1762
+ path: "/sites/{siteId}/content/{type}/order",
1763
+ method: "POST",
1764
+ tags: ["site-{siteId}", "content-{siteId}-{type}"],
1765
+ auth: "user",
1766
+ responseKind: "json",
1767
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1759
1768
  },
1760
1769
  getContentTemplate: {
1761
1770
  path: "/sites/{siteId}/content/types/{type}/template",
@@ -2147,6 +2156,46 @@ var ENDPOINT_DEFINITIONS = {
2147
2156
  auth: "user",
2148
2157
  responseKind: "json"
2149
2158
  },
2159
+ getSiteIconStyleGuide: {
2160
+ path: "/sites/{siteId}/settings/icon-style-guide",
2161
+ method: "GET",
2162
+ revalidate: 120,
2163
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2164
+ auth: "user",
2165
+ responseKind: "json",
2166
+ errors: []
2167
+ },
2168
+ updateSiteIconStyleGuide: {
2169
+ path: "/sites/{siteId}/settings/icon-style-guide",
2170
+ method: "POST",
2171
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2172
+ auth: "user",
2173
+ responseKind: "json",
2174
+ errors: []
2175
+ },
2176
+ regenerateSiteIconStyleGuide: {
2177
+ path: "/sites/{siteId}/settings/icon-style-guide/regenerate",
2178
+ method: "POST",
2179
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2180
+ auth: "user",
2181
+ responseKind: "json",
2182
+ errors: []
2183
+ },
2184
+ generateGeneratedIconSet: {
2185
+ path: "/sites/{siteId}/ai/generated-icons/generate",
2186
+ method: "POST",
2187
+ auth: "user",
2188
+ responseKind: "json",
2189
+ errors: []
2190
+ },
2191
+ applyGeneratedIconSet: {
2192
+ path: "/sites/{siteId}/ai/generated-icons/apply",
2193
+ method: "POST",
2194
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2195
+ auth: "user",
2196
+ responseKind: "json",
2197
+ errors: []
2198
+ },
2150
2199
  getSiteAiProfile: {
2151
2200
  path: "/sites/{siteId}/settings/ai-site-profile",
2152
2201
  method: "GET",
@@ -3922,6 +3971,14 @@ var ENDPOINT_DEFINITIONS = {
3922
3971
  auth: "public",
3923
3972
  responseKind: "json"
3924
3973
  },
3974
+ getGeneratedIconRenderAssets: {
3975
+ path: "/public/sites/{siteId}/generated-icon-assets",
3976
+ method: "POST",
3977
+ tags: [TAG_TEMPLATES.siteRoutableContent],
3978
+ auth: "public",
3979
+ responseKind: "json",
3980
+ errors: []
3981
+ },
3925
3982
  // Resolve entry subroute by kind and URL segment
3926
3983
  resolveEntrySubroute: {
3927
3984
  path: "/public/sites/{siteId}/routing/subroutes/resolve",
@@ -5626,6 +5683,13 @@ var ENDPOINT_DEFINITIONS = {
5626
5683
  auth: "service",
5627
5684
  responseKind: "json"
5628
5685
  },
5686
+ sdkDeleteNavigationMenu: {
5687
+ path: "/sdk/{siteId}/navigation/{menuId}",
5688
+ method: "DELETE",
5689
+ auth: "service",
5690
+ responseKind: "json",
5691
+ errors: ["resource:not_found", "server:internal_error"]
5692
+ },
5629
5693
  sdkUpsertTheme: {
5630
5694
  path: "/sdk/{siteId}/theme",
5631
5695
  method: "POST",
@@ -6288,6 +6352,20 @@ var managedDomainAddOnPricingSnapshotSchema = z.object({
6288
6352
  monthlyCurrency: z.literal("gbp")
6289
6353
  });
6290
6354
 
6355
+ // ../api/src/media.ts
6356
+ var AMBIENT_BACKGROUND_ROLES = [
6357
+ "light-texture",
6358
+ "proof-band-dark",
6359
+ "cta-wash",
6360
+ "footer-detail",
6361
+ "style-atmosphere-1",
6362
+ "style-atmosphere-2"
6363
+ ];
6364
+ var SITE_BACKGROUND_ASSET_USES = [
6365
+ "selected-background",
6366
+ ...AMBIENT_BACKGROUND_ROLES
6367
+ ];
6368
+
6291
6369
  // ../api/src/navigation/contracts.ts
6292
6370
  import { z as z2 } from "zod";
6293
6371
  var portalLinkPayloadSchema = z2.object({
@@ -6499,14 +6577,14 @@ function rotateNormalizedPoint(point, rotation) {
6499
6577
  const x = point.x;
6500
6578
  const y = point.y;
6501
6579
  switch (rotation) {
6580
+ case 0:
6581
+ return { x, y };
6502
6582
  case 90:
6503
6583
  return { x: 1 - y, y: x };
6504
6584
  case 180:
6505
6585
  return { x: 1 - x, y: 1 - y };
6506
6586
  case 270:
6507
6587
  return { x: y, y: 1 - x };
6508
- default:
6509
- return { x, y };
6510
6588
  }
6511
6589
  }
6512
6590
 
@@ -6621,6 +6699,9 @@ function resolveRepeaterGridColumnFieldId(options) {
6621
6699
  return asNonEmptyString(options?.id) ?? DEFAULT_REPEATER_GRID_COLUMN_FIELD_ID;
6622
6700
  }
6623
6701
 
6702
+ // ../blocks/src/system/icons/presets.ts
6703
+ var ICON_PICKER_PRESETS = ["cta", "feature"];
6704
+
6624
6705
  // ../blocks/src/system/manifest/schema.ts
6625
6706
  var visibilityLevels = ["admin", "designer", "author"];
6626
6707
  var MEDIA_KINDS = [
@@ -6699,6 +6780,8 @@ var uiSchema = z4.object({
6699
6780
  mediaPickerAutoOpen: z4.boolean().optional(),
6700
6781
  showMediaPreview: z4.boolean().optional(),
6701
6782
  showMediaOverlayActions: z4.boolean().optional(),
6783
+ mediaPreviewMaxWidth: z4.enum(["xs", "sm", "md", "none"]).optional(),
6784
+ preventMediaPreviewUpscale: z4.boolean().optional(),
6702
6785
  mediaDelivery: mediaDeliverySchema.optional(),
6703
6786
  mediaDeliveryByVariant: z4.record(z4.string(), mediaDeliverySchema).optional(),
6704
6787
  // Optional input hints for validators/widgets
@@ -6777,7 +6860,7 @@ var uiSchema = z4.object({
6777
6860
  layoutGridColumnField: z4.string().optional(),
6778
6861
  layoutGridMaxRows: z4.number().int().positive().optional(),
6779
6862
  // Icon picker configuration (used when ui.widget === 'iconPicker')
6780
- iconPickerPreset: z4.enum(["cta"]).optional(),
6863
+ iconPickerPreset: z4.enum(ICON_PICKER_PRESETS).optional(),
6781
6864
  // Entry picker configuration
6782
6865
  contentTypeField: z4.string().optional(),
6783
6866
  fixedContentType: z4.string().optional(),
@@ -6948,6 +7031,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
6948
7031
  type: z4.literal("repeater"),
6949
7032
  itemLabel: z4.string().default("Item"),
6950
7033
  itemLabelSource: z4.string().optional(),
7034
+ showSummary: z4.boolean().optional(),
7035
+ summaryFields: z4.string().array().optional(),
7036
+ summaryMaxChars: z4.number().int().positive().optional(),
6951
7037
  minItems: z4.number().int().min(0).default(0),
6952
7038
  maxItems: z4.number().int().positive().optional(),
6953
7039
  // Monomorphic mode
@@ -8440,7 +8526,7 @@ var themeColorBaseTokenNames = [
8440
8526
  "accentForeground"
8441
8527
  ];
8442
8528
  var themeColorBaseTokenSet = new Set(themeColorBaseTokenNames);
8443
- var SHADE_STEPS = [
8529
+ var themeColorShadeSteps = [
8444
8530
  "50",
8445
8531
  "100",
8446
8532
  "200",
@@ -8453,7 +8539,7 @@ var SHADE_STEPS = [
8453
8539
  "900",
8454
8540
  "950"
8455
8541
  ];
8456
- var shadeStepSet = new Set(SHADE_STEPS);
8542
+ var shadeStepSet = new Set(themeColorShadeSteps);
8457
8543
  function isKnownBaseToken(value) {
8458
8544
  return themeColorBaseTokenSet.has(value);
8459
8545
  }
@@ -12154,6 +12240,7 @@ var curatedSiteStyleIdValues = [
12154
12240
  "site-style:personal-retreat-journal",
12155
12241
  "site-style:tactile-workshop",
12156
12242
  "site-style:modern-wellness",
12243
+ "site-style:clarity-zen-blue",
12157
12244
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
12158
12245
  "site-style:bold-launch",
12159
12246
  "site-style:south-west-twerk-school"
@@ -12739,6 +12826,114 @@ var curatedSiteStyles = [
12739
12826
  paletteChoice("warm-neutral-clay")
12740
12827
  ]
12741
12828
  }),
12829
+ defineCuratedSiteStyle({
12830
+ id: "site-style:clarity-zen-blue",
12831
+ name: "Clarity Zen",
12832
+ description: "Calm, editorial, and reassuring for therapy, counselling, and wellbeing support practices.",
12833
+ 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.",
12834
+ siteCreatorSelection: {
12835
+ kind: "site_creator_keyword_heuristic",
12836
+ priority: 25
12837
+ },
12838
+ selectionKeywordRules: [
12839
+ { kind: "substring", value: "psychotherap" },
12840
+ { kind: "phrase", value: "mental health" },
12841
+ { kind: "phrase", value: "talk therapy" },
12842
+ { kind: "phrase", value: "therapy and wellbeing" }
12843
+ ],
12844
+ tokenRecipes: {
12845
+ palette: "brand-led",
12846
+ contrast: "standard",
12847
+ radius: "rounded",
12848
+ shadow: "subtle",
12849
+ typography: "serif-editorial",
12850
+ spacing: "airy",
12851
+ motion: "subtle"
12852
+ },
12853
+ compositionBudget: balancedBudget,
12854
+ themeOverrides: {
12855
+ typography: {
12856
+ body: {
12857
+ family: "Inter, system-ui, sans-serif",
12858
+ size: "md",
12859
+ weight: "regular",
12860
+ lineHeight: "relaxed",
12861
+ letterSpacing: "normal"
12862
+ },
12863
+ headings: {
12864
+ default: {
12865
+ family: '"Cormorant Garamond", Georgia, serif',
12866
+ weight: "regular",
12867
+ lineHeight: "normal",
12868
+ letterSpacing: "normal",
12869
+ colorToken: "text",
12870
+ italic: null,
12871
+ case: null
12872
+ },
12873
+ h1: {
12874
+ size: "xl",
12875
+ weight: "regular",
12876
+ lineHeight: "normal",
12877
+ letterSpacing: "normal",
12878
+ italic: null
12879
+ },
12880
+ h2: {
12881
+ size: "lg",
12882
+ weight: "regular",
12883
+ lineHeight: "normal",
12884
+ letterSpacing: "normal",
12885
+ italic: null
12886
+ },
12887
+ h3: {
12888
+ size: "md",
12889
+ weight: "regular",
12890
+ lineHeight: "normal",
12891
+ letterSpacing: "normal",
12892
+ italic: null
12893
+ }
12894
+ },
12895
+ scale: "majorThird"
12896
+ },
12897
+ bodyText: {
12898
+ intro: {
12899
+ paragraphSize: "default",
12900
+ headingSize: "editorial"
12901
+ }
12902
+ }
12903
+ },
12904
+ defaultBlockVariants: {
12905
+ "block.faq": "split-heading-columns"
12906
+ },
12907
+ recommendedAppearancePresetIds: [
12908
+ "hero-split-editorial",
12909
+ "intro-organic-statement",
12910
+ "feature-cards-raised-rule",
12911
+ "media-text-quiet-story",
12912
+ "testimonials-brand-background-quotes",
12913
+ "faq-contained-help",
12914
+ "contact-form-panel"
12915
+ ],
12916
+ recommendedHeaderLookIds: [
12917
+ "centered-calm",
12918
+ "serif-line",
12919
+ "minimal-transparent"
12920
+ ],
12921
+ recommendedFooterLookIds: [
12922
+ "footer-muted-grounding",
12923
+ "site-footer-brand-two-band"
12924
+ ],
12925
+ buttonPersonalityChoices: [
12926
+ buttonChoice("soft-pill"),
12927
+ buttonChoice("pebble"),
12928
+ buttonChoice("editorial-link")
12929
+ ],
12930
+ paletteVariantChoices: [
12931
+ paletteChoice("brand-led-cool"),
12932
+ paletteChoice("soft-natural-watercolor"),
12933
+ paletteChoice("soft-natural-stone"),
12934
+ paletteChoice("warm-neutral-cream")
12935
+ ]
12936
+ }),
12742
12937
  defineCuratedSiteStyle({
12743
12938
  id: "site-style:personal-retreat-journal",
12744
12939
  name: "Personal Retreat Journal",
@@ -16003,47 +16198,48 @@ function validateFieldDefinitions(fields3, fragmentId) {
16003
16198
  function prefixFieldId(field, scope) {
16004
16199
  const cloned = cloneFieldDefinition2(field);
16005
16200
  cloned.id = `${scope}.${field.id}`;
16006
- cloned.defaultValue = cloneUnknown(cloned.defaultValue);
16201
+ const defaultValue = cloned.defaultValue;
16202
+ cloned.defaultValue = cloneUnknown(defaultValue);
16007
16203
  cloned.visibleRoles = cloned.visibleRoles ? [...cloned.visibleRoles] : void 0;
16008
16204
  cloned.ui = cloneUnknown(cloned.ui);
16009
16205
  return cloned;
16010
16206
  }
16011
16207
  function cloneFieldDefinition2(field) {
16012
- switch (field.type) {
16013
- case "repeater":
16014
- if (field.polymorphic && field.itemTypes) {
16015
- return {
16016
- ...field,
16017
- polymorphic: true,
16018
- itemTypes: Object.fromEntries(
16019
- Object.entries(field.itemTypes).map(([key, itemType]) => [
16020
- key,
16021
- {
16022
- ...itemType,
16023
- fields: itemType.fields.map(cloneFieldDefinition2)
16024
- }
16025
- ])
16026
- )
16027
- };
16028
- } else if (field.schema) {
16029
- return {
16030
- ...field,
16031
- schema: {
16032
- fields: field.schema.fields.map(cloneFieldDefinition2)
16033
- }
16034
- };
16035
- }
16036
- return { ...field };
16037
- case "group":
16208
+ if (field.type === "repeater") {
16209
+ if (field.polymorphic && field.itemTypes) {
16210
+ return {
16211
+ ...field,
16212
+ polymorphic: true,
16213
+ itemTypes: Object.fromEntries(
16214
+ Object.entries(field.itemTypes).map(([key, itemType]) => [
16215
+ key,
16216
+ {
16217
+ ...itemType,
16218
+ fields: itemType.fields.map(cloneFieldDefinition2)
16219
+ }
16220
+ ])
16221
+ )
16222
+ };
16223
+ }
16224
+ if (field.schema) {
16038
16225
  return {
16039
16226
  ...field,
16040
16227
  schema: {
16041
16228
  fields: field.schema.fields.map(cloneFieldDefinition2)
16042
16229
  }
16043
16230
  };
16044
- default:
16045
- return { ...field };
16231
+ }
16232
+ return { ...field };
16046
16233
  }
16234
+ if (field.type === "group") {
16235
+ return {
16236
+ ...field,
16237
+ schema: {
16238
+ fields: field.schema.fields.map(cloneFieldDefinition2)
16239
+ }
16240
+ };
16241
+ }
16242
+ return { ...field };
16047
16243
  }
16048
16244
  function cloneUnknown(value) {
16049
16245
  if (value == null || typeof value !== "object") {
@@ -16812,36 +17008,46 @@ function buildCarouselLayout() {
16812
17008
  [buildTestimonialCard(repeat("data.entries", "testimonial"))]
16813
17009
  );
16814
17010
  }
17011
+ function buildResponsiveGridCards() {
17012
+ return [
17013
+ // 2 columns
17014
+ grid(
17015
+ { gap: "lg", cols: { base: 1, sm: 2 } },
17016
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17017
+ when("gridColumns", { equals: "2" })
17018
+ ),
17019
+ // 3 columns (default when unset)
17020
+ grid(
17021
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
17022
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17023
+ when("gridColumns", { equals: "3" })
17024
+ ),
17025
+ // 4 columns
17026
+ grid(
17027
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
17028
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17029
+ when("gridColumns", { equals: "4" })
17030
+ ),
17031
+ // Fallback to 3 columns when gridColumns is not set
17032
+ grid(
17033
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
17034
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17035
+ when("gridColumns", { not: true })
17036
+ )
17037
+ ];
17038
+ }
16815
17039
  function buildGridLayout() {
16816
17040
  return el(
16817
17041
  "div",
16818
17042
  { className: "rb-mt-12 rb-testimonials-carousel" },
16819
- [
16820
- // 2 columns
16821
- grid(
16822
- { gap: "lg", cols: { base: 1, sm: 2 } },
16823
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16824
- when("gridColumns", { equals: "2" })
16825
- ),
16826
- // 3 columns (default when unset)
16827
- grid(
16828
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
16829
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16830
- when("gridColumns", { equals: "3" })
16831
- ),
16832
- // 4 columns
16833
- grid(
16834
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
16835
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16836
- when("gridColumns", { equals: "4" })
16837
- ),
16838
- // Fallback to 3 columns when gridColumns is not set
16839
- grid(
16840
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
16841
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16842
- when("gridColumns", { not: true })
16843
- )
16844
- ]
17043
+ buildResponsiveGridCards()
17044
+ );
17045
+ }
17046
+ function buildGridCardsLayout(className) {
17047
+ return el(
17048
+ "div",
17049
+ { className },
17050
+ buildResponsiveGridCards()
16845
17051
  );
16846
17052
  }
16847
17053
  var testimonialsCarouselFragment = defineFragment({
@@ -18386,7 +18592,8 @@ function createBlockManifestWithContentShape(config, _contentShape) {
18386
18592
  return createBlockManifest(config);
18387
18593
  }
18388
18594
  function normalizeBlockLayout(layout) {
18389
- return Array.isArray(layout) ? [...layout] : layout;
18595
+ const rawLayout = layout;
18596
+ return Array.isArray(rawLayout) ? rawLayout : rawLayout;
18390
18597
  }
18391
18598
  function deriveComponentName(id) {
18392
18599
  const base = id.replace(/^block\./, "");
@@ -19809,6 +20016,24 @@ var questionColumnsLayout = styledSection({
19809
20016
  }),
19810
20017
  baseClass: ""
19811
20018
  });
20019
+ var splitHeadingColumnsLayout = styledSection({
20020
+ children: styledContainer({
20021
+ baseClassName: "rb-relative rb-isolate",
20022
+ children: el(
20023
+ "div",
20024
+ {
20025
+ className: "rb-faq-split-heading-columns rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
20026
+ },
20027
+ [
20028
+ el("div", { className: "rb-faq-split-heading-columns-copy" }, [headingLayout]),
20029
+ el("div", { className: "rb-faq-split-heading-columns-accordion" }, [
20030
+ questionColumnsAccordionLayout
20031
+ ])
20032
+ ]
20033
+ )
20034
+ }),
20035
+ baseClass: ""
20036
+ });
19812
20037
  var faqManifest = createBlockManifest({
19813
20038
  id: "block.faq",
19814
20039
  title: "FAQ",
@@ -19829,7 +20054,8 @@ var faqManifest = createBlockManifest({
19829
20054
  variants: {
19830
20055
  default: defaultLayout,
19831
20056
  "two-column": twoColumnLayout,
19832
- "question-columns": questionColumnsLayout
20057
+ "question-columns": questionColumnsLayout,
20058
+ "split-heading-columns": splitHeadingColumnsLayout
19833
20059
  },
19834
20060
  defaultVariant: "default",
19835
20061
  variantOptions: {
@@ -19844,6 +20070,10 @@ var faqManifest = createBlockManifest({
19844
20070
  "question-columns": {
19845
20071
  label: "Question columns",
19846
20072
  description: "A full-width heading above FAQ items split into two columns."
20073
+ },
20074
+ "split-heading-columns": {
20075
+ label: "Split heading columns",
20076
+ description: "A left heading column with FAQ items split into two columns on the right."
19847
20077
  }
19848
20078
  },
19849
20079
  description: "Accordion of frequently asked questions and answers.",
@@ -19932,16 +20162,20 @@ var marqueeLoopTransform = {
19932
20162
  summary: "Repeat an array to a minimum length, then duplicate it for seamless marquee looping",
19933
20163
  schema: marqueeLoopOptionsSchema,
19934
20164
  run: (value, options) => {
19935
- if (!Array.isArray(value) || value.length === 0) return [];
20165
+ const items = toUnknownArray(value);
20166
+ if (items.length === 0) return [];
19936
20167
  const minItems = options?.minItems ?? 10;
19937
20168
  const base = [];
19938
20169
  while (base.length < minItems) {
19939
- base.push(...value);
20170
+ base.push(...items);
19940
20171
  if (base.length > 1e3) break;
19941
20172
  }
19942
20173
  return [...base, ...base];
19943
20174
  }
19944
20175
  };
20176
+ function toUnknownArray(value) {
20177
+ return Array.isArray(value) ? value : [];
20178
+ }
19945
20179
  var formattingTransforms = [
19946
20180
  uppercaseTransform,
19947
20181
  fallbackTransform,
@@ -21924,6 +22158,7 @@ var siteFooterBlockDefinition = {
21924
22158
  };
21925
22159
 
21926
22160
  // ../blocks/src/system/blocks/testimonials.tsx
22161
+ var backgroundImageClassName = "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-object-cover rb-opacity-50";
21927
22162
  var wrapVariant = (variantLayout) => styledSection({
21928
22163
  children: styledContainer({
21929
22164
  children: stack(
@@ -21937,10 +22172,53 @@ var wrapVariant = (variantLayout) => styledSection({
21937
22172
  // styledContainer (rb-container) already provides horizontal padding
21938
22173
  baseClass: "",
21939
22174
  spacing: "comfortable",
21940
- imageClassName: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-object-cover rb-opacity-50"
22175
+ imageClassName: backgroundImageClassName
21941
22176
  });
21942
22177
  var carouselLayout = wrapVariant(buildCarouselLayout());
21943
22178
  var gridLayout2 = wrapVariant(buildGridLayout());
22179
+ var splitHeading = stack(
22180
+ { gap: "md", className: "rb-testimonials-split-heading-copy rb-max-w-xl" },
22181
+ [
22182
+ text(
22183
+ { as: "h2" },
22184
+ when("content.heading"),
22185
+ bind("content.heading")
22186
+ ),
22187
+ headingDecoration({
22188
+ family: "short-center-rule",
22189
+ placement: "after-heading"
22190
+ }),
22191
+ text(
22192
+ {
22193
+ as: "p",
22194
+ className: "rb-prose",
22195
+ style: textColorStyle("mutedText")
22196
+ },
22197
+ when("content.subheading"),
22198
+ bind("content.subheading")
22199
+ )
22200
+ ]
22201
+ );
22202
+ var splitGridLayout = styledSection({
22203
+ children: styledContainer({
22204
+ baseClassName: "rb-relative rb-isolate",
22205
+ children: el(
22206
+ "div",
22207
+ {
22208
+ className: "rb-testimonials-split-grid rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
22209
+ },
22210
+ [
22211
+ el("div", { className: "rb-testimonials-split-grid-heading" }, [splitHeading]),
22212
+ el("div", { className: "rb-testimonials-split-grid-cards" }, [
22213
+ buildGridCardsLayout("rb-testimonials-split-grid-card-list")
22214
+ ])
22215
+ ]
22216
+ )
22217
+ }),
22218
+ baseClass: "",
22219
+ spacing: "comfortable",
22220
+ imageClassName: backgroundImageClassName
22221
+ });
21944
22222
  var additionalFields = parseFieldDefinitions([
21945
22223
  // Heading fields from fragment
21946
22224
  ...testimonialsHeadingFragment.fields,
@@ -21972,7 +22250,7 @@ var additionalFields = parseFieldDefinitions([
21972
22250
  ],
21973
22251
  ui: {
21974
22252
  intent: "display",
21975
- visibleWhen: { field: "variant", equals: "grid" }
22253
+ visibleWhen: { field: "variant", oneOf: ["grid", "split-grid"] }
21976
22254
  }
21977
22255
  },
21978
22256
  // Carousel-specific fields (from fragment)
@@ -22006,7 +22284,8 @@ var testimonialsManifest = createBlockManifest({
22006
22284
  // Variant system - enables the variant switcher control in the editor
22007
22285
  variants: {
22008
22286
  carousel: carouselLayout,
22009
- grid: gridLayout2
22287
+ grid: gridLayout2,
22288
+ "split-grid": splitGridLayout
22010
22289
  },
22011
22290
  defaultVariant: "carousel",
22012
22291
  variantOptions: {
@@ -22019,6 +22298,11 @@ var testimonialsManifest = createBlockManifest({
22019
22298
  label: "Grid",
22020
22299
  description: "Responsive grid layout",
22021
22300
  icon: "Grid"
22301
+ },
22302
+ "split-grid": {
22303
+ label: "Split grid",
22304
+ description: "Heading on the left with testimonial cards on the right",
22305
+ icon: "PanelLeft"
22022
22306
  }
22023
22307
  },
22024
22308
  // Fields (variant field is auto-generated by augmentManifest)
@@ -22411,6 +22695,13 @@ var collectionBlockDefinition = {
22411
22695
  manifest: collectionManifest
22412
22696
  };
22413
22697
 
22698
+ // ../blocks/src/system/blocks/feature-card-icons.ts
22699
+ var FEATURE_CARD_ICON_TREATMENTS = [
22700
+ "plain",
22701
+ "soft-badge",
22702
+ "utility-badge"
22703
+ ];
22704
+
22414
22705
  // ../blocks/src/system/blocks/feature-cards.ts
22415
22706
  function grid3(props2, children) {
22416
22707
  return el("grid", props2 ?? void 0, children ?? void 0);
@@ -22453,6 +22744,15 @@ var featureCard = styledCard(
22453
22744
  bind("card.media")
22454
22745
  ),
22455
22746
  stack({ gap: "sm", className: "rb-feature-card-content rb-flex-1 rb-p-6" }, [
22747
+ el(
22748
+ "feature-card-icon",
22749
+ {
22750
+ treatment: { $bind: { from: "content._iconTreatment", fallback: "soft-badge" } },
22751
+ generatedAssets: { $bind: { from: "data.generatedIconAssets" } }
22752
+ },
22753
+ null,
22754
+ bind("card.icon")
22755
+ ),
22456
22756
  text(
22457
22757
  {
22458
22758
  as: "h3",
@@ -22574,6 +22874,16 @@ var featureCardsConfig = {
22574
22874
  defaultValue: "4/3",
22575
22875
  visibleWhen: { field: "media", notEquals: null }
22576
22876
  }),
22877
+ {
22878
+ id: "icon",
22879
+ type: "text",
22880
+ label: "Icon",
22881
+ required: false,
22882
+ ui: {
22883
+ widget: "iconPicker",
22884
+ iconPickerPreset: "feature"
22885
+ }
22886
+ },
22577
22887
  {
22578
22888
  id: "title",
22579
22889
  type: "text",
@@ -22609,6 +22919,19 @@ var featureCardsConfig = {
22609
22919
  ]
22610
22920
  }
22611
22921
  },
22922
+ {
22923
+ id: "_iconTreatment",
22924
+ type: "select",
22925
+ label: "Icon style",
22926
+ required: false,
22927
+ defaultValue: "soft-badge",
22928
+ multiple: false,
22929
+ options: FEATURE_CARD_ICON_TREATMENTS.map((value) => ({
22930
+ value,
22931
+ label: value === "plain" ? "Plain" : value === "soft-badge" ? "Soft badge" : "Utility badge"
22932
+ })),
22933
+ ui: { intent: "display" }
22934
+ },
22612
22935
  cardStylesField({
22613
22936
  id: "_cardStyles",
22614
22937
  label: "Card styles"
@@ -23611,8 +23934,8 @@ var eventSurfaceScopeValues = [
23611
23934
  "custom"
23612
23935
  ];
23613
23936
  var eventScheduleScopeValues = ["any", "recurring", "oneOff"];
23614
- var asEventCategoryId = (value) => value;
23615
- var asVenueId = (value) => value;
23937
+ var unsafeAsEventCategoryId = (value) => value;
23938
+ var unsafeAsVenueId = (value) => value;
23616
23939
  function normalizeEventBlockKind(value) {
23617
23940
  return value === "courses" || value === "events" ? value : "all";
23618
23941
  }
@@ -23638,10 +23961,10 @@ function normalizeEventCategoryIds(value) {
23638
23961
  if (Array.isArray(value)) {
23639
23962
  return normalizeIdList(
23640
23963
  value.filter((entry) => typeof entry === "string")
23641
- ).map(asEventCategoryId);
23964
+ ).map(unsafeAsEventCategoryId);
23642
23965
  }
23643
23966
  if (typeof value === "string") {
23644
- return normalizeIdList(value.split(",")).map(asEventCategoryId);
23967
+ return normalizeIdList(value.split(",")).map(unsafeAsEventCategoryId);
23645
23968
  }
23646
23969
  return [];
23647
23970
  }
@@ -23654,7 +23977,7 @@ function normalizeEventVenueId(value) {
23654
23977
  return null;
23655
23978
  }
23656
23979
  const trimmed = value.trim();
23657
- return trimmed ? asVenueId(trimmed) : null;
23980
+ return trimmed ? unsafeAsVenueId(trimmed) : null;
23658
23981
  }
23659
23982
  function normalizeEventStaffMemberId(value) {
23660
23983
  if (typeof value !== "string") {
@@ -30426,7 +30749,8 @@ var systemBlockDefinitionsRaw = [
30426
30749
  layoutProfiles: [
30427
30750
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
30428
30751
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
30429
- layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" })
30752
+ layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" }),
30753
+ layoutProfile({ variantKey: "split-heading-columns", family: "split", weight: "standard" })
30430
30754
  ]
30431
30755
  })),
30432
30756
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -30457,6 +30781,12 @@ var systemBlockDefinitionsRaw = [
30457
30781
  family: "grid",
30458
30782
  weight: "standard",
30459
30783
  bias: "soft"
30784
+ }),
30785
+ layoutProfile({
30786
+ variantKey: "split-grid",
30787
+ family: "split",
30788
+ weight: "featured",
30789
+ bias: "soft"
30460
30790
  })
30461
30791
  ]
30462
30792
  })),
@@ -33278,11 +33608,11 @@ function normalizeContent(block) {
33278
33608
  }
33279
33609
  function normalizeParams(input) {
33280
33610
  if (!input || typeof input !== "object") return {};
33281
- const entries = Object.entries(input).map(([key, value]) => [
33282
- key,
33283
- coerceToString(value)
33284
- ]);
33285
- return Object.fromEntries(entries);
33611
+ const output = {};
33612
+ for (const [key, value] of Object.entries(input)) {
33613
+ output[key] = coerceToString(value);
33614
+ }
33615
+ return output;
33286
33616
  }
33287
33617
  function isNonArrayObject(value) {
33288
33618
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -33498,10 +33828,16 @@ var dashboardConfigSchema = z61.object({
33498
33828
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
33499
33829
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
33500
33830
  var sdkLoaderEndpointSchema = z61.enum(SUPPORTED_LOADER_ENDPOINTS);
33831
+ var loaderFallbackScalarSchema = z61.union([
33832
+ z61.string(),
33833
+ z61.number(),
33834
+ z61.boolean(),
33835
+ z61.null()
33836
+ ]);
33501
33837
  var loaderParamBindingSchema = z61.object({
33502
33838
  $bind: z61.object({
33503
33839
  from: z61.string().min(1, "Binding path is required"),
33504
- fallback: z61.string().optional()
33840
+ fallback: loaderFallbackScalarSchema.optional()
33505
33841
  })
33506
33842
  });
33507
33843
  var loaderParamValueSchema = z61.union([
@@ -33647,9 +33983,13 @@ var sdkBlockFieldOptionsMapSchema = z61.record(
33647
33983
  var sdkContentTypeTemplateConfigSchema = z61.object({
33648
33984
  blocks: z61.array(z61.unknown())
33649
33985
  }).passthrough();
33986
+ var sdkContentTypeOrderingConfigSchema = z61.object({
33987
+ mode: z61.enum(["default", "manual"]).optional()
33988
+ }).optional();
33650
33989
  var sdkContentTypeConfigSchema = z61.object({
33651
33990
  key: z61.string().min(1),
33652
33991
  fields: z61.array(z61.unknown()),
33992
+ ordering: sdkContentTypeOrderingConfigSchema,
33653
33993
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
33654
33994
  }).passthrough();
33655
33995
  var sdkContentConfigSchema = z61.object({
@@ -34490,7 +34830,6 @@ var websiteSurfaceIds = [
34490
34830
  "site.footerBlocks",
34491
34831
  "site.navigation",
34492
34832
  "site.media",
34493
- "site.style",
34494
34833
  "site.performance"
34495
34834
  ];
34496
34835
  var websiteSurfaceIdSet = new Set(
@@ -34511,6 +34850,12 @@ var hiddenDemoSettingsNavSurfaceIds = [
34511
34850
  ];
34512
34851
  var hiddenDemoSettingsNavIds = new Set(hiddenDemoSettingsNavSurfaceIds);
34513
34852
 
34853
+ // ../api/src/navigation/identity.ts
34854
+ function unsafeAsNavigationMenuIdentifier(identifier) {
34855
+ return identifier;
34856
+ }
34857
+ var MAIN_NAVIGATION_MENU_IDENTIFIER = unsafeAsNavigationMenuIdentifier("main");
34858
+
34514
34859
  // ../api/src/aiPlayground.ts
34515
34860
  import { z as z66 } from "zod";
34516
34861
  var Rfc6902PatchOp = z66.discriminatedUnion("op", [
@@ -34649,7 +34994,7 @@ async function prefetchBlockData2(page, context, client, options) {
34649
34994
  throw new Error("listPublishedEntries requires siteId and type params");
34650
34995
  }
34651
34996
  const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
34652
- const order = orderBy === "newest" || orderBy === "oldest" || orderBy === "title" || orderBy === "order" ? orderBy : void 0;
34997
+ const order = orderBy === "order" ? "manual" : orderBy === "newest" || orderBy === "oldest" || orderBy === "title" ? orderBy : void 0;
34653
34998
  const parsedEntryIds = mode === "manual" ? parseManualEntryIds(entryIds) : void 0;
34654
34999
  if (mode === "manual" && (!parsedEntryIds || parsedEntryIds.length === 0)) {
34655
35000
  return { entries: [] };
@@ -34922,7 +35267,7 @@ function usePage(params) {
34922
35267
  });
34923
35268
  }
34924
35269
  }
34925
- fetchPage();
35270
+ void fetchPage();
34926
35271
  return () => {
34927
35272
  cancelled = true;
34928
35273
  };