@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
@@ -1748,7 +1748,16 @@ var ENDPOINT_DEFINITIONS = {
1748
1748
  revalidate: 60,
1749
1749
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1750
1750
  auth: "user",
1751
- responseKind: "json"
1751
+ responseKind: "json",
1752
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1753
+ },
1754
+ reorderContentEntries: {
1755
+ path: "/sites/{siteId}/content/{type}/order",
1756
+ method: "POST",
1757
+ tags: ["site-{siteId}", "content-{siteId}-{type}"],
1758
+ auth: "user",
1759
+ responseKind: "json",
1760
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1752
1761
  },
1753
1762
  getContentTemplate: {
1754
1763
  path: "/sites/{siteId}/content/types/{type}/template",
@@ -2140,6 +2149,46 @@ var ENDPOINT_DEFINITIONS = {
2140
2149
  auth: "user",
2141
2150
  responseKind: "json"
2142
2151
  },
2152
+ getSiteIconStyleGuide: {
2153
+ path: "/sites/{siteId}/settings/icon-style-guide",
2154
+ method: "GET",
2155
+ revalidate: 120,
2156
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2157
+ auth: "user",
2158
+ responseKind: "json",
2159
+ errors: []
2160
+ },
2161
+ updateSiteIconStyleGuide: {
2162
+ path: "/sites/{siteId}/settings/icon-style-guide",
2163
+ method: "POST",
2164
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2165
+ auth: "user",
2166
+ responseKind: "json",
2167
+ errors: []
2168
+ },
2169
+ regenerateSiteIconStyleGuide: {
2170
+ path: "/sites/{siteId}/settings/icon-style-guide/regenerate",
2171
+ method: "POST",
2172
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2173
+ auth: "user",
2174
+ responseKind: "json",
2175
+ errors: []
2176
+ },
2177
+ generateGeneratedIconSet: {
2178
+ path: "/sites/{siteId}/ai/generated-icons/generate",
2179
+ method: "POST",
2180
+ auth: "user",
2181
+ responseKind: "json",
2182
+ errors: []
2183
+ },
2184
+ applyGeneratedIconSet: {
2185
+ path: "/sites/{siteId}/ai/generated-icons/apply",
2186
+ method: "POST",
2187
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2188
+ auth: "user",
2189
+ responseKind: "json",
2190
+ errors: []
2191
+ },
2143
2192
  getSiteAiProfile: {
2144
2193
  path: "/sites/{siteId}/settings/ai-site-profile",
2145
2194
  method: "GET",
@@ -3915,6 +3964,14 @@ var ENDPOINT_DEFINITIONS = {
3915
3964
  auth: "public",
3916
3965
  responseKind: "json"
3917
3966
  },
3967
+ getGeneratedIconRenderAssets: {
3968
+ path: "/public/sites/{siteId}/generated-icon-assets",
3969
+ method: "POST",
3970
+ tags: [TAG_TEMPLATES.siteRoutableContent],
3971
+ auth: "public",
3972
+ responseKind: "json",
3973
+ errors: []
3974
+ },
3918
3975
  // Resolve entry subroute by kind and URL segment
3919
3976
  resolveEntrySubroute: {
3920
3977
  path: "/public/sites/{siteId}/routing/subroutes/resolve",
@@ -5619,6 +5676,13 @@ var ENDPOINT_DEFINITIONS = {
5619
5676
  auth: "service",
5620
5677
  responseKind: "json"
5621
5678
  },
5679
+ sdkDeleteNavigationMenu: {
5680
+ path: "/sdk/{siteId}/navigation/{menuId}",
5681
+ method: "DELETE",
5682
+ auth: "service",
5683
+ responseKind: "json",
5684
+ errors: ["resource:not_found", "server:internal_error"]
5685
+ },
5622
5686
  sdkUpsertTheme: {
5623
5687
  path: "/sdk/{siteId}/theme",
5624
5688
  method: "POST",
@@ -6281,6 +6345,20 @@ var managedDomainAddOnPricingSnapshotSchema = z.object({
6281
6345
  monthlyCurrency: z.literal("gbp")
6282
6346
  });
6283
6347
 
6348
+ // ../api/src/media.ts
6349
+ var AMBIENT_BACKGROUND_ROLES = [
6350
+ "light-texture",
6351
+ "proof-band-dark",
6352
+ "cta-wash",
6353
+ "footer-detail",
6354
+ "style-atmosphere-1",
6355
+ "style-atmosphere-2"
6356
+ ];
6357
+ var SITE_BACKGROUND_ASSET_USES = [
6358
+ "selected-background",
6359
+ ...AMBIENT_BACKGROUND_ROLES
6360
+ ];
6361
+
6284
6362
  // ../api/src/navigation/contracts.ts
6285
6363
  import { z as z2 } from "zod";
6286
6364
  var portalLinkPayloadSchema = z2.object({
@@ -6492,14 +6570,14 @@ function rotateNormalizedPoint(point, rotation) {
6492
6570
  const x = point.x;
6493
6571
  const y = point.y;
6494
6572
  switch (rotation) {
6573
+ case 0:
6574
+ return { x, y };
6495
6575
  case 90:
6496
6576
  return { x: 1 - y, y: x };
6497
6577
  case 180:
6498
6578
  return { x: 1 - x, y: 1 - y };
6499
6579
  case 270:
6500
6580
  return { x: y, y: 1 - x };
6501
- default:
6502
- return { x, y };
6503
6581
  }
6504
6582
  }
6505
6583
 
@@ -6614,6 +6692,9 @@ function resolveRepeaterGridColumnFieldId(options) {
6614
6692
  return asNonEmptyString(options?.id) ?? DEFAULT_REPEATER_GRID_COLUMN_FIELD_ID;
6615
6693
  }
6616
6694
 
6695
+ // ../blocks/src/system/icons/presets.ts
6696
+ var ICON_PICKER_PRESETS = ["cta", "feature"];
6697
+
6617
6698
  // ../blocks/src/system/manifest/schema.ts
6618
6699
  var visibilityLevels = ["admin", "designer", "author"];
6619
6700
  var MEDIA_KINDS = [
@@ -6692,6 +6773,8 @@ var uiSchema = z4.object({
6692
6773
  mediaPickerAutoOpen: z4.boolean().optional(),
6693
6774
  showMediaPreview: z4.boolean().optional(),
6694
6775
  showMediaOverlayActions: z4.boolean().optional(),
6776
+ mediaPreviewMaxWidth: z4.enum(["xs", "sm", "md", "none"]).optional(),
6777
+ preventMediaPreviewUpscale: z4.boolean().optional(),
6695
6778
  mediaDelivery: mediaDeliverySchema.optional(),
6696
6779
  mediaDeliveryByVariant: z4.record(z4.string(), mediaDeliverySchema).optional(),
6697
6780
  // Optional input hints for validators/widgets
@@ -6770,7 +6853,7 @@ var uiSchema = z4.object({
6770
6853
  layoutGridColumnField: z4.string().optional(),
6771
6854
  layoutGridMaxRows: z4.number().int().positive().optional(),
6772
6855
  // Icon picker configuration (used when ui.widget === 'iconPicker')
6773
- iconPickerPreset: z4.enum(["cta"]).optional(),
6856
+ iconPickerPreset: z4.enum(ICON_PICKER_PRESETS).optional(),
6774
6857
  // Entry picker configuration
6775
6858
  contentTypeField: z4.string().optional(),
6776
6859
  fixedContentType: z4.string().optional(),
@@ -6941,6 +7024,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
6941
7024
  type: z4.literal("repeater"),
6942
7025
  itemLabel: z4.string().default("Item"),
6943
7026
  itemLabelSource: z4.string().optional(),
7027
+ showSummary: z4.boolean().optional(),
7028
+ summaryFields: z4.string().array().optional(),
7029
+ summaryMaxChars: z4.number().int().positive().optional(),
6944
7030
  minItems: z4.number().int().min(0).default(0),
6945
7031
  maxItems: z4.number().int().positive().optional(),
6946
7032
  // Monomorphic mode
@@ -8433,7 +8519,7 @@ var themeColorBaseTokenNames = [
8433
8519
  "accentForeground"
8434
8520
  ];
8435
8521
  var themeColorBaseTokenSet = new Set(themeColorBaseTokenNames);
8436
- var SHADE_STEPS = [
8522
+ var themeColorShadeSteps = [
8437
8523
  "50",
8438
8524
  "100",
8439
8525
  "200",
@@ -8446,7 +8532,7 @@ var SHADE_STEPS = [
8446
8532
  "900",
8447
8533
  "950"
8448
8534
  ];
8449
- var shadeStepSet = new Set(SHADE_STEPS);
8535
+ var shadeStepSet = new Set(themeColorShadeSteps);
8450
8536
  function isKnownBaseToken(value) {
8451
8537
  return themeColorBaseTokenSet.has(value);
8452
8538
  }
@@ -12147,6 +12233,7 @@ var curatedSiteStyleIdValues = [
12147
12233
  "site-style:personal-retreat-journal",
12148
12234
  "site-style:tactile-workshop",
12149
12235
  "site-style:modern-wellness",
12236
+ "site-style:clarity-zen-blue",
12150
12237
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
12151
12238
  "site-style:bold-launch",
12152
12239
  "site-style:south-west-twerk-school"
@@ -12732,6 +12819,114 @@ var curatedSiteStyles = [
12732
12819
  paletteChoice("warm-neutral-clay")
12733
12820
  ]
12734
12821
  }),
12822
+ defineCuratedSiteStyle({
12823
+ id: "site-style:clarity-zen-blue",
12824
+ name: "Clarity Zen",
12825
+ description: "Calm, editorial, and reassuring for therapy, counselling, and wellbeing support practices.",
12826
+ 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.",
12827
+ siteCreatorSelection: {
12828
+ kind: "site_creator_keyword_heuristic",
12829
+ priority: 25
12830
+ },
12831
+ selectionKeywordRules: [
12832
+ { kind: "substring", value: "psychotherap" },
12833
+ { kind: "phrase", value: "mental health" },
12834
+ { kind: "phrase", value: "talk therapy" },
12835
+ { kind: "phrase", value: "therapy and wellbeing" }
12836
+ ],
12837
+ tokenRecipes: {
12838
+ palette: "brand-led",
12839
+ contrast: "standard",
12840
+ radius: "rounded",
12841
+ shadow: "subtle",
12842
+ typography: "serif-editorial",
12843
+ spacing: "airy",
12844
+ motion: "subtle"
12845
+ },
12846
+ compositionBudget: balancedBudget,
12847
+ themeOverrides: {
12848
+ typography: {
12849
+ body: {
12850
+ family: "Inter, system-ui, sans-serif",
12851
+ size: "md",
12852
+ weight: "regular",
12853
+ lineHeight: "relaxed",
12854
+ letterSpacing: "normal"
12855
+ },
12856
+ headings: {
12857
+ default: {
12858
+ family: '"Cormorant Garamond", Georgia, serif',
12859
+ weight: "regular",
12860
+ lineHeight: "normal",
12861
+ letterSpacing: "normal",
12862
+ colorToken: "text",
12863
+ italic: null,
12864
+ case: null
12865
+ },
12866
+ h1: {
12867
+ size: "xl",
12868
+ weight: "regular",
12869
+ lineHeight: "normal",
12870
+ letterSpacing: "normal",
12871
+ italic: null
12872
+ },
12873
+ h2: {
12874
+ size: "lg",
12875
+ weight: "regular",
12876
+ lineHeight: "normal",
12877
+ letterSpacing: "normal",
12878
+ italic: null
12879
+ },
12880
+ h3: {
12881
+ size: "md",
12882
+ weight: "regular",
12883
+ lineHeight: "normal",
12884
+ letterSpacing: "normal",
12885
+ italic: null
12886
+ }
12887
+ },
12888
+ scale: "majorThird"
12889
+ },
12890
+ bodyText: {
12891
+ intro: {
12892
+ paragraphSize: "default",
12893
+ headingSize: "editorial"
12894
+ }
12895
+ }
12896
+ },
12897
+ defaultBlockVariants: {
12898
+ "block.faq": "split-heading-columns"
12899
+ },
12900
+ recommendedAppearancePresetIds: [
12901
+ "hero-split-editorial",
12902
+ "intro-organic-statement",
12903
+ "feature-cards-raised-rule",
12904
+ "media-text-quiet-story",
12905
+ "testimonials-brand-background-quotes",
12906
+ "faq-contained-help",
12907
+ "contact-form-panel"
12908
+ ],
12909
+ recommendedHeaderLookIds: [
12910
+ "centered-calm",
12911
+ "serif-line",
12912
+ "minimal-transparent"
12913
+ ],
12914
+ recommendedFooterLookIds: [
12915
+ "footer-muted-grounding",
12916
+ "site-footer-brand-two-band"
12917
+ ],
12918
+ buttonPersonalityChoices: [
12919
+ buttonChoice("soft-pill"),
12920
+ buttonChoice("pebble"),
12921
+ buttonChoice("editorial-link")
12922
+ ],
12923
+ paletteVariantChoices: [
12924
+ paletteChoice("brand-led-cool"),
12925
+ paletteChoice("soft-natural-watercolor"),
12926
+ paletteChoice("soft-natural-stone"),
12927
+ paletteChoice("warm-neutral-cream")
12928
+ ]
12929
+ }),
12735
12930
  defineCuratedSiteStyle({
12736
12931
  id: "site-style:personal-retreat-journal",
12737
12932
  name: "Personal Retreat Journal",
@@ -15996,47 +16191,48 @@ function validateFieldDefinitions(fields3, fragmentId) {
15996
16191
  function prefixFieldId(field, scope) {
15997
16192
  const cloned = cloneFieldDefinition2(field);
15998
16193
  cloned.id = `${scope}.${field.id}`;
15999
- cloned.defaultValue = cloneUnknown(cloned.defaultValue);
16194
+ const defaultValue = cloned.defaultValue;
16195
+ cloned.defaultValue = cloneUnknown(defaultValue);
16000
16196
  cloned.visibleRoles = cloned.visibleRoles ? [...cloned.visibleRoles] : void 0;
16001
16197
  cloned.ui = cloneUnknown(cloned.ui);
16002
16198
  return cloned;
16003
16199
  }
16004
16200
  function cloneFieldDefinition2(field) {
16005
- switch (field.type) {
16006
- case "repeater":
16007
- if (field.polymorphic && field.itemTypes) {
16008
- return {
16009
- ...field,
16010
- polymorphic: true,
16011
- itemTypes: Object.fromEntries(
16012
- Object.entries(field.itemTypes).map(([key, itemType]) => [
16013
- key,
16014
- {
16015
- ...itemType,
16016
- fields: itemType.fields.map(cloneFieldDefinition2)
16017
- }
16018
- ])
16019
- )
16020
- };
16021
- } else if (field.schema) {
16022
- return {
16023
- ...field,
16024
- schema: {
16025
- fields: field.schema.fields.map(cloneFieldDefinition2)
16026
- }
16027
- };
16028
- }
16029
- return { ...field };
16030
- case "group":
16201
+ if (field.type === "repeater") {
16202
+ if (field.polymorphic && field.itemTypes) {
16203
+ return {
16204
+ ...field,
16205
+ polymorphic: true,
16206
+ itemTypes: Object.fromEntries(
16207
+ Object.entries(field.itemTypes).map(([key, itemType]) => [
16208
+ key,
16209
+ {
16210
+ ...itemType,
16211
+ fields: itemType.fields.map(cloneFieldDefinition2)
16212
+ }
16213
+ ])
16214
+ )
16215
+ };
16216
+ }
16217
+ if (field.schema) {
16031
16218
  return {
16032
16219
  ...field,
16033
16220
  schema: {
16034
16221
  fields: field.schema.fields.map(cloneFieldDefinition2)
16035
16222
  }
16036
16223
  };
16037
- default:
16038
- return { ...field };
16224
+ }
16225
+ return { ...field };
16039
16226
  }
16227
+ if (field.type === "group") {
16228
+ return {
16229
+ ...field,
16230
+ schema: {
16231
+ fields: field.schema.fields.map(cloneFieldDefinition2)
16232
+ }
16233
+ };
16234
+ }
16235
+ return { ...field };
16040
16236
  }
16041
16237
  function cloneUnknown(value) {
16042
16238
  if (value == null || typeof value !== "object") {
@@ -16805,36 +17001,46 @@ function buildCarouselLayout() {
16805
17001
  [buildTestimonialCard(repeat("data.entries", "testimonial"))]
16806
17002
  );
16807
17003
  }
17004
+ function buildResponsiveGridCards() {
17005
+ return [
17006
+ // 2 columns
17007
+ grid(
17008
+ { gap: "lg", cols: { base: 1, sm: 2 } },
17009
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17010
+ when("gridColumns", { equals: "2" })
17011
+ ),
17012
+ // 3 columns (default when unset)
17013
+ grid(
17014
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
17015
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17016
+ when("gridColumns", { equals: "3" })
17017
+ ),
17018
+ // 4 columns
17019
+ grid(
17020
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
17021
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17022
+ when("gridColumns", { equals: "4" })
17023
+ ),
17024
+ // Fallback to 3 columns when gridColumns is not set
17025
+ grid(
17026
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
17027
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17028
+ when("gridColumns", { not: true })
17029
+ )
17030
+ ];
17031
+ }
16808
17032
  function buildGridLayout() {
16809
17033
  return el(
16810
17034
  "div",
16811
17035
  { className: "rb-mt-12 rb-testimonials-carousel" },
16812
- [
16813
- // 2 columns
16814
- grid(
16815
- { gap: "lg", cols: { base: 1, sm: 2 } },
16816
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16817
- when("gridColumns", { equals: "2" })
16818
- ),
16819
- // 3 columns (default when unset)
16820
- grid(
16821
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
16822
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16823
- when("gridColumns", { equals: "3" })
16824
- ),
16825
- // 4 columns
16826
- grid(
16827
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
16828
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16829
- when("gridColumns", { equals: "4" })
16830
- ),
16831
- // Fallback to 3 columns when gridColumns is not set
16832
- grid(
16833
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
16834
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16835
- when("gridColumns", { not: true })
16836
- )
16837
- ]
17036
+ buildResponsiveGridCards()
17037
+ );
17038
+ }
17039
+ function buildGridCardsLayout(className) {
17040
+ return el(
17041
+ "div",
17042
+ { className },
17043
+ buildResponsiveGridCards()
16838
17044
  );
16839
17045
  }
16840
17046
  var testimonialsCarouselFragment = defineFragment({
@@ -18379,7 +18585,8 @@ function createBlockManifestWithContentShape(config, _contentShape) {
18379
18585
  return createBlockManifest(config);
18380
18586
  }
18381
18587
  function normalizeBlockLayout(layout) {
18382
- return Array.isArray(layout) ? [...layout] : layout;
18588
+ const rawLayout = layout;
18589
+ return Array.isArray(rawLayout) ? rawLayout : rawLayout;
18383
18590
  }
18384
18591
  function deriveComponentName(id) {
18385
18592
  const base = id.replace(/^block\./, "");
@@ -19802,6 +20009,24 @@ var questionColumnsLayout = styledSection({
19802
20009
  }),
19803
20010
  baseClass: ""
19804
20011
  });
20012
+ var splitHeadingColumnsLayout = styledSection({
20013
+ children: styledContainer({
20014
+ baseClassName: "rb-relative rb-isolate",
20015
+ children: el(
20016
+ "div",
20017
+ {
20018
+ className: "rb-faq-split-heading-columns rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
20019
+ },
20020
+ [
20021
+ el("div", { className: "rb-faq-split-heading-columns-copy" }, [headingLayout]),
20022
+ el("div", { className: "rb-faq-split-heading-columns-accordion" }, [
20023
+ questionColumnsAccordionLayout
20024
+ ])
20025
+ ]
20026
+ )
20027
+ }),
20028
+ baseClass: ""
20029
+ });
19805
20030
  var faqManifest = createBlockManifest({
19806
20031
  id: "block.faq",
19807
20032
  title: "FAQ",
@@ -19822,7 +20047,8 @@ var faqManifest = createBlockManifest({
19822
20047
  variants: {
19823
20048
  default: defaultLayout,
19824
20049
  "two-column": twoColumnLayout,
19825
- "question-columns": questionColumnsLayout
20050
+ "question-columns": questionColumnsLayout,
20051
+ "split-heading-columns": splitHeadingColumnsLayout
19826
20052
  },
19827
20053
  defaultVariant: "default",
19828
20054
  variantOptions: {
@@ -19837,6 +20063,10 @@ var faqManifest = createBlockManifest({
19837
20063
  "question-columns": {
19838
20064
  label: "Question columns",
19839
20065
  description: "A full-width heading above FAQ items split into two columns."
20066
+ },
20067
+ "split-heading-columns": {
20068
+ label: "Split heading columns",
20069
+ description: "A left heading column with FAQ items split into two columns on the right."
19840
20070
  }
19841
20071
  },
19842
20072
  description: "Accordion of frequently asked questions and answers.",
@@ -19925,16 +20155,20 @@ var marqueeLoopTransform = {
19925
20155
  summary: "Repeat an array to a minimum length, then duplicate it for seamless marquee looping",
19926
20156
  schema: marqueeLoopOptionsSchema,
19927
20157
  run: (value, options) => {
19928
- if (!Array.isArray(value) || value.length === 0) return [];
20158
+ const items = toUnknownArray(value);
20159
+ if (items.length === 0) return [];
19929
20160
  const minItems = options?.minItems ?? 10;
19930
20161
  const base = [];
19931
20162
  while (base.length < minItems) {
19932
- base.push(...value);
20163
+ base.push(...items);
19933
20164
  if (base.length > 1e3) break;
19934
20165
  }
19935
20166
  return [...base, ...base];
19936
20167
  }
19937
20168
  };
20169
+ function toUnknownArray(value) {
20170
+ return Array.isArray(value) ? value : [];
20171
+ }
19938
20172
  var formattingTransforms = [
19939
20173
  uppercaseTransform,
19940
20174
  fallbackTransform,
@@ -21917,6 +22151,7 @@ var siteFooterBlockDefinition = {
21917
22151
  };
21918
22152
 
21919
22153
  // ../blocks/src/system/blocks/testimonials.tsx
22154
+ var backgroundImageClassName = "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-object-cover rb-opacity-50";
21920
22155
  var wrapVariant = (variantLayout) => styledSection({
21921
22156
  children: styledContainer({
21922
22157
  children: stack(
@@ -21930,10 +22165,53 @@ var wrapVariant = (variantLayout) => styledSection({
21930
22165
  // styledContainer (rb-container) already provides horizontal padding
21931
22166
  baseClass: "",
21932
22167
  spacing: "comfortable",
21933
- imageClassName: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-object-cover rb-opacity-50"
22168
+ imageClassName: backgroundImageClassName
21934
22169
  });
21935
22170
  var carouselLayout = wrapVariant(buildCarouselLayout());
21936
22171
  var gridLayout2 = wrapVariant(buildGridLayout());
22172
+ var splitHeading = stack(
22173
+ { gap: "md", className: "rb-testimonials-split-heading-copy rb-max-w-xl" },
22174
+ [
22175
+ text(
22176
+ { as: "h2" },
22177
+ when("content.heading"),
22178
+ bind("content.heading")
22179
+ ),
22180
+ headingDecoration({
22181
+ family: "short-center-rule",
22182
+ placement: "after-heading"
22183
+ }),
22184
+ text(
22185
+ {
22186
+ as: "p",
22187
+ className: "rb-prose",
22188
+ style: textColorStyle("mutedText")
22189
+ },
22190
+ when("content.subheading"),
22191
+ bind("content.subheading")
22192
+ )
22193
+ ]
22194
+ );
22195
+ var splitGridLayout = styledSection({
22196
+ children: styledContainer({
22197
+ baseClassName: "rb-relative rb-isolate",
22198
+ children: el(
22199
+ "div",
22200
+ {
22201
+ className: "rb-testimonials-split-grid rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
22202
+ },
22203
+ [
22204
+ el("div", { className: "rb-testimonials-split-grid-heading" }, [splitHeading]),
22205
+ el("div", { className: "rb-testimonials-split-grid-cards" }, [
22206
+ buildGridCardsLayout("rb-testimonials-split-grid-card-list")
22207
+ ])
22208
+ ]
22209
+ )
22210
+ }),
22211
+ baseClass: "",
22212
+ spacing: "comfortable",
22213
+ imageClassName: backgroundImageClassName
22214
+ });
21937
22215
  var additionalFields = parseFieldDefinitions([
21938
22216
  // Heading fields from fragment
21939
22217
  ...testimonialsHeadingFragment.fields,
@@ -21965,7 +22243,7 @@ var additionalFields = parseFieldDefinitions([
21965
22243
  ],
21966
22244
  ui: {
21967
22245
  intent: "display",
21968
- visibleWhen: { field: "variant", equals: "grid" }
22246
+ visibleWhen: { field: "variant", oneOf: ["grid", "split-grid"] }
21969
22247
  }
21970
22248
  },
21971
22249
  // Carousel-specific fields (from fragment)
@@ -21999,7 +22277,8 @@ var testimonialsManifest = createBlockManifest({
21999
22277
  // Variant system - enables the variant switcher control in the editor
22000
22278
  variants: {
22001
22279
  carousel: carouselLayout,
22002
- grid: gridLayout2
22280
+ grid: gridLayout2,
22281
+ "split-grid": splitGridLayout
22003
22282
  },
22004
22283
  defaultVariant: "carousel",
22005
22284
  variantOptions: {
@@ -22012,6 +22291,11 @@ var testimonialsManifest = createBlockManifest({
22012
22291
  label: "Grid",
22013
22292
  description: "Responsive grid layout",
22014
22293
  icon: "Grid"
22294
+ },
22295
+ "split-grid": {
22296
+ label: "Split grid",
22297
+ description: "Heading on the left with testimonial cards on the right",
22298
+ icon: "PanelLeft"
22015
22299
  }
22016
22300
  },
22017
22301
  // Fields (variant field is auto-generated by augmentManifest)
@@ -22404,6 +22688,13 @@ var collectionBlockDefinition = {
22404
22688
  manifest: collectionManifest
22405
22689
  };
22406
22690
 
22691
+ // ../blocks/src/system/blocks/feature-card-icons.ts
22692
+ var FEATURE_CARD_ICON_TREATMENTS = [
22693
+ "plain",
22694
+ "soft-badge",
22695
+ "utility-badge"
22696
+ ];
22697
+
22407
22698
  // ../blocks/src/system/blocks/feature-cards.ts
22408
22699
  function grid3(props2, children) {
22409
22700
  return el("grid", props2 ?? void 0, children ?? void 0);
@@ -22446,6 +22737,15 @@ var featureCard = styledCard(
22446
22737
  bind("card.media")
22447
22738
  ),
22448
22739
  stack({ gap: "sm", className: "rb-feature-card-content rb-flex-1 rb-p-6" }, [
22740
+ el(
22741
+ "feature-card-icon",
22742
+ {
22743
+ treatment: { $bind: { from: "content._iconTreatment", fallback: "soft-badge" } },
22744
+ generatedAssets: { $bind: { from: "data.generatedIconAssets" } }
22745
+ },
22746
+ null,
22747
+ bind("card.icon")
22748
+ ),
22449
22749
  text(
22450
22750
  {
22451
22751
  as: "h3",
@@ -22567,6 +22867,16 @@ var featureCardsConfig = {
22567
22867
  defaultValue: "4/3",
22568
22868
  visibleWhen: { field: "media", notEquals: null }
22569
22869
  }),
22870
+ {
22871
+ id: "icon",
22872
+ type: "text",
22873
+ label: "Icon",
22874
+ required: false,
22875
+ ui: {
22876
+ widget: "iconPicker",
22877
+ iconPickerPreset: "feature"
22878
+ }
22879
+ },
22570
22880
  {
22571
22881
  id: "title",
22572
22882
  type: "text",
@@ -22602,6 +22912,19 @@ var featureCardsConfig = {
22602
22912
  ]
22603
22913
  }
22604
22914
  },
22915
+ {
22916
+ id: "_iconTreatment",
22917
+ type: "select",
22918
+ label: "Icon style",
22919
+ required: false,
22920
+ defaultValue: "soft-badge",
22921
+ multiple: false,
22922
+ options: FEATURE_CARD_ICON_TREATMENTS.map((value) => ({
22923
+ value,
22924
+ label: value === "plain" ? "Plain" : value === "soft-badge" ? "Soft badge" : "Utility badge"
22925
+ })),
22926
+ ui: { intent: "display" }
22927
+ },
22605
22928
  cardStylesField({
22606
22929
  id: "_cardStyles",
22607
22930
  label: "Card styles"
@@ -23604,8 +23927,8 @@ var eventSurfaceScopeValues = [
23604
23927
  "custom"
23605
23928
  ];
23606
23929
  var eventScheduleScopeValues = ["any", "recurring", "oneOff"];
23607
- var asEventCategoryId = (value) => value;
23608
- var asVenueId = (value) => value;
23930
+ var unsafeAsEventCategoryId = (value) => value;
23931
+ var unsafeAsVenueId = (value) => value;
23609
23932
  function normalizeEventBlockKind(value) {
23610
23933
  return value === "courses" || value === "events" ? value : "all";
23611
23934
  }
@@ -23631,10 +23954,10 @@ function normalizeEventCategoryIds(value) {
23631
23954
  if (Array.isArray(value)) {
23632
23955
  return normalizeIdList(
23633
23956
  value.filter((entry) => typeof entry === "string")
23634
- ).map(asEventCategoryId);
23957
+ ).map(unsafeAsEventCategoryId);
23635
23958
  }
23636
23959
  if (typeof value === "string") {
23637
- return normalizeIdList(value.split(",")).map(asEventCategoryId);
23960
+ return normalizeIdList(value.split(",")).map(unsafeAsEventCategoryId);
23638
23961
  }
23639
23962
  return [];
23640
23963
  }
@@ -23647,7 +23970,7 @@ function normalizeEventVenueId(value) {
23647
23970
  return null;
23648
23971
  }
23649
23972
  const trimmed = value.trim();
23650
- return trimmed ? asVenueId(trimmed) : null;
23973
+ return trimmed ? unsafeAsVenueId(trimmed) : null;
23651
23974
  }
23652
23975
  function normalizeEventStaffMemberId(value) {
23653
23976
  if (typeof value !== "string") {
@@ -30419,7 +30742,8 @@ var systemBlockDefinitionsRaw = [
30419
30742
  layoutProfiles: [
30420
30743
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
30421
30744
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
30422
- layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" })
30745
+ layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" }),
30746
+ layoutProfile({ variantKey: "split-heading-columns", family: "split", weight: "standard" })
30423
30747
  ]
30424
30748
  })),
30425
30749
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -30450,6 +30774,12 @@ var systemBlockDefinitionsRaw = [
30450
30774
  family: "grid",
30451
30775
  weight: "standard",
30452
30776
  bias: "soft"
30777
+ }),
30778
+ layoutProfile({
30779
+ variantKey: "split-grid",
30780
+ family: "split",
30781
+ weight: "featured",
30782
+ bias: "soft"
30453
30783
  })
30454
30784
  ]
30455
30785
  })),
@@ -33271,11 +33601,11 @@ function normalizeContent(block) {
33271
33601
  }
33272
33602
  function normalizeParams(input) {
33273
33603
  if (!input || typeof input !== "object") return {};
33274
- const entries = Object.entries(input).map(([key, value]) => [
33275
- key,
33276
- coerceToString(value)
33277
- ]);
33278
- return Object.fromEntries(entries);
33604
+ const output = {};
33605
+ for (const [key, value] of Object.entries(input)) {
33606
+ output[key] = coerceToString(value);
33607
+ }
33608
+ return output;
33279
33609
  }
33280
33610
  function isNonArrayObject(value) {
33281
33611
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -33491,10 +33821,16 @@ var dashboardConfigSchema = z61.object({
33491
33821
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
33492
33822
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
33493
33823
  var sdkLoaderEndpointSchema = z61.enum(SUPPORTED_LOADER_ENDPOINTS);
33824
+ var loaderFallbackScalarSchema = z61.union([
33825
+ z61.string(),
33826
+ z61.number(),
33827
+ z61.boolean(),
33828
+ z61.null()
33829
+ ]);
33494
33830
  var loaderParamBindingSchema = z61.object({
33495
33831
  $bind: z61.object({
33496
33832
  from: z61.string().min(1, "Binding path is required"),
33497
- fallback: z61.string().optional()
33833
+ fallback: loaderFallbackScalarSchema.optional()
33498
33834
  })
33499
33835
  });
33500
33836
  var loaderParamValueSchema = z61.union([
@@ -33640,9 +33976,13 @@ var sdkBlockFieldOptionsMapSchema = z61.record(
33640
33976
  var sdkContentTypeTemplateConfigSchema = z61.object({
33641
33977
  blocks: z61.array(z61.unknown())
33642
33978
  }).passthrough();
33979
+ var sdkContentTypeOrderingConfigSchema = z61.object({
33980
+ mode: z61.enum(["default", "manual"]).optional()
33981
+ }).optional();
33643
33982
  var sdkContentTypeConfigSchema = z61.object({
33644
33983
  key: z61.string().min(1),
33645
33984
  fields: z61.array(z61.unknown()),
33985
+ ordering: sdkContentTypeOrderingConfigSchema,
33646
33986
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
33647
33987
  }).passthrough();
33648
33988
  var sdkContentConfigSchema = z61.object({
@@ -34483,7 +34823,6 @@ var websiteSurfaceIds = [
34483
34823
  "site.footerBlocks",
34484
34824
  "site.navigation",
34485
34825
  "site.media",
34486
- "site.style",
34487
34826
  "site.performance"
34488
34827
  ];
34489
34828
  var websiteSurfaceIdSet = new Set(
@@ -34504,6 +34843,12 @@ var hiddenDemoSettingsNavSurfaceIds = [
34504
34843
  ];
34505
34844
  var hiddenDemoSettingsNavIds = new Set(hiddenDemoSettingsNavSurfaceIds);
34506
34845
 
34846
+ // ../api/src/navigation/identity.ts
34847
+ function unsafeAsNavigationMenuIdentifier(identifier) {
34848
+ return identifier;
34849
+ }
34850
+ var MAIN_NAVIGATION_MENU_IDENTIFIER = unsafeAsNavigationMenuIdentifier("main");
34851
+
34507
34852
  // ../api/src/aiPlayground.ts
34508
34853
  import { z as z66 } from "zod";
34509
34854
  var Rfc6902PatchOp = z66.discriminatedUnion("op", [
@@ -34642,7 +34987,7 @@ async function prefetchBlockData2(page, context, client, options) {
34642
34987
  throw new Error("listPublishedEntries requires siteId and type params");
34643
34988
  }
34644
34989
  const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
34645
- const order = orderBy === "newest" || orderBy === "oldest" || orderBy === "title" || orderBy === "order" ? orderBy : void 0;
34990
+ const order = orderBy === "order" ? "manual" : orderBy === "newest" || orderBy === "oldest" || orderBy === "title" ? orderBy : void 0;
34646
34991
  const parsedEntryIds = mode === "manual" ? parseManualEntryIds(entryIds) : void 0;
34647
34992
  if (mode === "manual" && (!parsedEntryIds || parsedEntryIds.length === 0)) {
34648
34993
  return { entries: [] };