@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
@@ -4,7 +4,10 @@ import { BlockForm } from '../BlockForm';
4
4
  import type { ComponentProps } from 'react';
5
5
  import type { BlockItem, BlockFocusRequest } from './types';
6
6
  import type { FieldWidgetComponent } from '../../../block-form/src/client/index';
7
- export declare function BlockCardBody({ siteId, block, manifest, uiStore, hasRecoveryConflict, focusSignal, onFocusHandled, onBlockSave, theme, widgetOverrides, hideThemeV2RawStyleFields, pageDesignBlock, }: {
7
+ import type { SiteIconStyleGuideVersionId } from '../../../blocks/src/index';
8
+ import type { GeneratedIconSetGenerateResult, GeneratedIconSetPreview } from './GeneratedIconSetDialog';
9
+ import type { getFeatureCardIconDialogCards } from './featureCardIconActions';
10
+ export declare function BlockCardBody({ siteId, block, manifest, uiStore, hasRecoveryConflict, focusSignal, onFocusHandled, onBlockSave, theme, widgetOverrides, hideThemeV2RawStyleFields, pageDesignBlock, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet, onApplyGeneratedIconSet, }: {
8
11
  siteId: string;
9
12
  block: BlockItem;
10
13
  manifest: SystemBlockDefinition['manifest'];
@@ -17,4 +20,12 @@ export declare function BlockCardBody({ siteId, block, manifest, uiStore, hasRec
17
20
  widgetOverrides?: Record<string, FieldWidgetComponent>;
18
21
  hideThemeV2RawStyleFields?: boolean;
19
22
  pageDesignBlock?: PageDesignEditorBlock | null;
23
+ currentStyleGuideVersionId?: SiteIconStyleGuideVersionId | null;
24
+ iconStyleGuideSummary?: string | null;
25
+ iconStyleGuideEditHref?: string | null;
26
+ onGenerateIconSet?: (input: Readonly<{
27
+ userStyleNote: string | null;
28
+ cards: ReturnType<typeof getFeatureCardIconDialogCards>;
29
+ }>) => Promise<GeneratedIconSetGenerateResult>;
30
+ onApplyGeneratedIconSet?: (preview: GeneratedIconSetPreview) => GeneratedIconSetPreview | void | Promise<GeneratedIconSetPreview | void>;
20
31
  }): import("react/jsx-runtime").JSX.Element;
@@ -1,16 +1,18 @@
1
1
  import type { SyntheticListenerMap } from '@dnd-kit/core/dist/hooks/utilities';
2
2
  import type { FieldWidgetComponent } from '../../../block-form/src/client/index';
3
- import { type SystemBlockDefinition, type Theme } from '../../../blocks/src/index';
3
+ import { type SiteIconStyleGuideVersionId, type SystemBlockDefinition, type Theme } from '../../../blocks/src/index';
4
4
  import { type BlockActionControlMode } from './actionControlMode';
5
5
  import type { ReorderControlMode } from './reorderControlMode';
6
6
  import type { BlockItem, UiStore, DraftsSlice, ArrayKeysManager } from './types';
7
+ import { getFeatureCardIconDialogCards } from './featureCardIconActions';
8
+ import { type GeneratedIconSetGenerateResult, type GeneratedIconSetPreview } from './GeneratedIconSetDialog';
7
9
  /** Drag listener props from dnd-kit */
8
10
  type DragListeners = SyntheticListenerMap | undefined;
9
11
  type BlockCardHeaderStore = UiStore<{
10
12
  drafts: Pick<DraftsSlice, 'getBlockSnapshot' | 'getCurrentValues' | 'initNewBlock' | 'updateBlockBaseline' | 'clearError' | 'setAtPath' | 'getAtPath'>;
11
13
  arrayKeys: ArrayKeysManager;
12
14
  }>;
13
- export declare function BlockCardHeader({ block, manifest, isFirst, isLast, isMoving, onMove, onDuplicate, onDelete, dragListeners, canReorder, collapsed, onToggleCollapsed, contentId, uiStore, widgetOverrides, theme, hideThemeV2RawStyleFields, reorderControlMode, actionControlMode, }: {
15
+ export declare function BlockCardHeader({ block, manifest, isFirst, isLast, isMoving, onMove, onDuplicate, onDelete, dragListeners, canReorder, collapsed, onToggleCollapsed, contentId, uiStore, widgetOverrides, theme, hideThemeV2RawStyleFields, reorderControlMode, actionControlMode, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet, onApplyGeneratedIconSet, }: {
14
16
  block: BlockItem;
15
17
  manifest: SystemBlockDefinition['manifest'];
16
18
  isFirst: boolean;
@@ -31,5 +33,13 @@ export declare function BlockCardHeader({ block, manifest, isFirst, isLast, isMo
31
33
  hideThemeV2RawStyleFields?: boolean;
32
34
  reorderControlMode?: ReorderControlMode;
33
35
  actionControlMode?: BlockActionControlMode;
36
+ currentStyleGuideVersionId?: SiteIconStyleGuideVersionId | null;
37
+ iconStyleGuideSummary?: string | null;
38
+ iconStyleGuideEditHref?: string | null;
39
+ onGenerateIconSet?: (input: Readonly<{
40
+ userStyleNote: string | null;
41
+ cards: ReturnType<typeof getFeatureCardIconDialogCards>;
42
+ }>) => Promise<GeneratedIconSetGenerateResult>;
43
+ onApplyGeneratedIconSet?: (preview: GeneratedIconSetPreview) => GeneratedIconSetPreview | void | Promise<GeneratedIconSetPreview | void>;
34
44
  }): import("react/jsx-runtime").JSX.Element;
35
45
  export {};
@@ -0,0 +1,21 @@
1
+ import type { SiteIconStyleGuideVersionId } from '../../../blocks/src/index';
2
+ import type { BlockItem, DraftsSlice, UiStore } from './types';
3
+ import { getFeatureCardIconDialogCards } from './featureCardIconActions';
4
+ import { type GeneratedIconSetGenerateResult, type GeneratedIconSetPreview } from './GeneratedIconSetDialog';
5
+ type FeatureCardIconsPanelStore = UiStore<{
6
+ drafts: Pick<DraftsSlice, 'getCurrentValues' | 'setAtPath'>;
7
+ }>;
8
+ export declare function supportsFeatureCardIconActions(blockKind: string): boolean;
9
+ export declare function FeatureCardIconsPanel({ block, uiStore, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet, onApplyGeneratedIconSet, }: {
10
+ block: BlockItem;
11
+ uiStore: FeatureCardIconsPanelStore;
12
+ currentStyleGuideVersionId?: SiteIconStyleGuideVersionId | null;
13
+ iconStyleGuideSummary?: string | null;
14
+ iconStyleGuideEditHref?: string | null;
15
+ onGenerateIconSet?: (input: Readonly<{
16
+ userStyleNote: string | null;
17
+ cards: ReturnType<typeof getFeatureCardIconDialogCards>;
18
+ }>) => Promise<GeneratedIconSetGenerateResult>;
19
+ onApplyGeneratedIconSet?: (preview: GeneratedIconSetPreview) => GeneratedIconSetPreview | void | Promise<GeneratedIconSetPreview | void>;
20
+ }): import("react/jsx-runtime").JSX.Element | null;
21
+ export {};
@@ -0,0 +1,40 @@
1
+ import { type GeneratedBlockIconValue } from '../../../blocks/src/index';
2
+ import type { GeneratedIconSetCandidate } from '../../../api/src/index';
3
+ import type { FeatureCardIconDialogCard } from './featureCardIconActions';
4
+ export type GeneratedIconSetPreviewAsset = Readonly<{
5
+ cardKey: string;
6
+ title: string;
7
+ src: string;
8
+ iconValue: GeneratedBlockIconValue;
9
+ }>;
10
+ export type GeneratedIconSetPreview = Readonly<{
11
+ setId: string;
12
+ styleGuideSummary: string;
13
+ candidate?: GeneratedIconSetCandidate;
14
+ assets: readonly GeneratedIconSetPreviewAsset[];
15
+ }>;
16
+ export type GeneratedIconSetGenerateResult = Readonly<{
17
+ kind: 'preview_ready';
18
+ preview: GeneratedIconSetPreview;
19
+ }> | Readonly<{
20
+ kind: 'failed';
21
+ message: string;
22
+ }>;
23
+ export type GeneratedIconSetApplyResult = Readonly<{
24
+ kind: 'applied';
25
+ }> | Readonly<{
26
+ kind: 'failed';
27
+ message: string;
28
+ }>;
29
+ export declare function GeneratedIconSetDialog({ open, onOpenChange, cards, styleGuideSummary, styleGuideEditHref, onGenerate, onApply, }: {
30
+ open: boolean;
31
+ onOpenChange: (open: boolean) => void;
32
+ cards: readonly FeatureCardIconDialogCard[];
33
+ styleGuideSummary?: string | null;
34
+ styleGuideEditHref?: string | null;
35
+ onGenerate?: (input: Readonly<{
36
+ userStyleNote: string | null;
37
+ cards: readonly FeatureCardIconDialogCard[];
38
+ }>) => Promise<GeneratedIconSetGenerateResult>;
39
+ onApply?: (preview: GeneratedIconSetPreview) => GeneratedIconSetApplyResult | void | Promise<GeneratedIconSetApplyResult | void>;
40
+ }): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import { type ComponentProps } from 'react';
2
- import { type Theme } from '../../../blocks/src/index';
2
+ import { type Theme, type SiteIconStyleGuideVersionId } from '../../../blocks/src/index';
3
3
  import type { PageDesignEditorBlock } from '../../../theme-core/src/site-styles/index';
4
4
  import type { BlockFocusRequest, BlockItem } from './types';
5
5
  import { type CustomBlockRegistryEntry, type SdkConfigForBlockPicker } from './sdkBlockMerger';
@@ -7,6 +7,8 @@ import { BlockCard } from './BlockCard';
7
7
  import type { FieldWidgetComponent } from '../../../block-form/src/client/index';
8
8
  import { type BlockActionControlMode } from './actionControlMode';
9
9
  import { type ReorderControlMode } from './reorderControlMode';
10
+ import type { GeneratedIconSetGenerateResult, GeneratedIconSetPreview } from './GeneratedIconSetDialog';
11
+ import type { getFeatureCardIconDialogCards } from './featureCardIconActions';
10
12
  export declare const SortableBlockItem: import("react").NamedExoticComponent<{
11
13
  siteId: string;
12
14
  block: BlockItem;
@@ -33,4 +35,12 @@ export declare const SortableBlockItem: import("react").NamedExoticComponent<{
33
35
  pageDesignBlock?: PageDesignEditorBlock | null;
34
36
  reorderControlMode?: ReorderControlMode;
35
37
  actionControlMode?: BlockActionControlMode;
38
+ currentStyleGuideVersionId?: SiteIconStyleGuideVersionId | null;
39
+ iconStyleGuideSummary?: string | null;
40
+ iconStyleGuideEditHref?: string | null;
41
+ onGenerateIconSet?: (input: Readonly<{
42
+ userStyleNote: string | null;
43
+ cards: ReturnType<typeof getFeatureCardIconDialogCards>;
44
+ }>) => Promise<GeneratedIconSetGenerateResult>;
45
+ onApplyGeneratedIconSet?: (preview: GeneratedIconSetPreview) => GeneratedIconSetPreview | void | Promise<GeneratedIconSetPreview | void>;
36
46
  }>;
@@ -0,0 +1,82 @@
1
+ import { applyFeatureCardIconSuggestions, type GeneratedBlockIconValue, type FeatureCardIconInputContent, type SemanticIconId, type SiteIconStyleGuideVersionId } from '../../../blocks/src/index';
2
+ import { type EditorBlockId } from '../../../core/src/index';
3
+ import type { DraftsSlice } from './types';
4
+ type FeatureCardIconActionDrafts = Pick<DraftsSlice, 'setAtPath'>;
5
+ export type FeatureCardIconActionResult = {
6
+ kind: 'applied';
7
+ appliedCount: number;
8
+ } | {
9
+ kind: 'no_cards';
10
+ } | {
11
+ kind: 'complete';
12
+ } | {
13
+ kind: 'plan_failed';
14
+ reason: Exclude<ReturnType<typeof applyFeatureCardIconSuggestions>['kind'], 'applied'>;
15
+ cardKey?: string;
16
+ iconId?: string;
17
+ };
18
+ export type FeatureCardGeneratedIconSetAssetInput = Readonly<{
19
+ cardKey: string;
20
+ iconValue: unknown;
21
+ }>;
22
+ export type FeatureCardGeneratedIconSetApplyPlan = Readonly<{
23
+ kind: 'applied';
24
+ appliedIcons: readonly Readonly<{
25
+ cardIndex: number;
26
+ cardKey: string;
27
+ iconValue: GeneratedBlockIconValue;
28
+ }>[];
29
+ }> | Readonly<{
30
+ kind: 'duplicate_asset_card_key';
31
+ cardKey: string;
32
+ }> | Readonly<{
33
+ kind: 'missing_asset_card_key';
34
+ cardKey: string;
35
+ }> | Readonly<{
36
+ kind: 'unknown_card_key';
37
+ cardKey: string;
38
+ }> | Readonly<{
39
+ kind: 'invalid_generated_icon';
40
+ cardKey: string;
41
+ }>;
42
+ export type FeatureCardGeneratedIconSetActionResult = Readonly<{
43
+ kind: 'applied';
44
+ appliedCount: number;
45
+ }> | Readonly<{
46
+ kind: 'no_cards';
47
+ }> | Readonly<{
48
+ kind: 'plan_failed';
49
+ reason: Exclude<FeatureCardGeneratedIconSetApplyPlan['kind'], 'applied'>;
50
+ cardKey?: string;
51
+ }>;
52
+ export type FeatureCardIconDialogCard = Readonly<{
53
+ cardKey: string;
54
+ title: string;
55
+ bodyText: string;
56
+ semanticIconId: SemanticIconId;
57
+ }>;
58
+ export type FeatureCardGeneratedIconStyleSummary = Readonly<{
59
+ kind: 'unavailable';
60
+ }> | Readonly<{
61
+ kind: 'available';
62
+ generatedCount: number;
63
+ staleCount: number;
64
+ invalidGeneratedCount: number;
65
+ }>;
66
+ export declare function getFeatureCards(content: Record<string, unknown> | null | undefined): FeatureCardIconInputContent[];
67
+ export declare function getFeatureCardIconStatus(content: Record<string, unknown> | null | undefined): import("../../../blocks/src/index").FeatureCardIconCompletion;
68
+ export declare function getFeatureCardIconDialogCards(content: Record<string, unknown> | null | undefined): readonly FeatureCardIconDialogCard[];
69
+ export declare function getFeatureCardGeneratedIconStyleSummary(content: Record<string, unknown> | null | undefined, currentStyleGuideVersionId: SiteIconStyleGuideVersionId | null | undefined): FeatureCardGeneratedIconStyleSummary;
70
+ export declare function applyCuratedFeatureCardIconSuggestions({ blockId, content, drafts, }: {
71
+ blockId: EditorBlockId;
72
+ content: Record<string, unknown> | null | undefined;
73
+ drafts: FeatureCardIconActionDrafts;
74
+ }): FeatureCardIconActionResult;
75
+ export declare function planGeneratedFeatureCardIconSetApply(cards: readonly FeatureCardIconInputContent[], assets: readonly FeatureCardGeneratedIconSetAssetInput[]): FeatureCardGeneratedIconSetApplyPlan;
76
+ export declare function applyGeneratedFeatureCardIconSet({ blockId, content, drafts, assets, }: {
77
+ blockId: EditorBlockId;
78
+ content: Record<string, unknown> | null | undefined;
79
+ drafts: FeatureCardIconActionDrafts;
80
+ assets: readonly FeatureCardGeneratedIconSetAssetInput[];
81
+ }): FeatureCardGeneratedIconSetActionResult;
82
+ export {};
@@ -5,7 +5,7 @@ export type ManifestFieldIssue = {
5
5
  path: string;
6
6
  segments: string[];
7
7
  message: string;
8
- code: z.ZodIssue['code'];
8
+ code: string;
9
9
  };
10
10
  export type BlockContentPayloadResult<TValues extends Record<string, unknown> = Record<string, unknown>> = {
11
11
  data: TValues | null;
@@ -1,4 +1,4 @@
1
1
  import { type FieldWidgetProps, type TextFieldConfig } from '../../../../block-form/src/client/index';
2
- type IconPickerValue = string | null;
2
+ type IconPickerValue = unknown;
3
3
  export declare function IconPickerField({ path, backend, config }: FieldWidgetProps<IconPickerValue, TextFieldConfig>): import("react/jsx-runtime").JSX.Element;
4
4
  export {};
@@ -61,6 +61,9 @@ export type FileUse = {
61
61
  } | {
62
62
  readonly tag: 'site-brand-asset';
63
63
  readonly brandUse: SiteBrandAssetUse;
64
+ } | {
65
+ readonly tag: 'site-background-asset';
66
+ readonly backgroundUse: SiteBackgroundAssetUse;
64
67
  } | {
65
68
  readonly tag: 'site-font-file';
66
69
  readonly fontId: SiteFontId;
@@ -71,10 +74,14 @@ export type FileUse = {
71
74
  export type FileUseTag = FileUse['tag'];
72
75
  export type WorkflowInputKind = 'audio-enrichment' | 'generic-file-processing';
73
76
  export type SiteBrandAssetUse = 'logo' | 'social-image';
77
+ export type AmbientBackgroundRole = 'light-texture' | 'proof-band-dark' | 'cta-wash' | 'footer-detail' | 'style-atmosphere-1' | 'style-atmosphere-2';
78
+ export type SiteBackgroundAssetUse = 'selected-background' | AmbientBackgroundRole;
74
79
  export type TemporaryIngestionKind = 'backup-zip' | 'newsletter-csv' | 'instagram-zip';
75
- export declare const FILE_USE_TAGS: readonly ["media-library", "content-download", "digital-product-file", "workflow-input", "booking-evidence", "site-brand-asset", "site-font-file", "temporary-ingestion"];
80
+ export declare const FILE_USE_TAGS: readonly ["media-library", "content-download", "digital-product-file", "workflow-input", "booking-evidence", "site-brand-asset", "site-background-asset", "site-font-file", "temporary-ingestion"];
76
81
  export declare const WORKFLOW_INPUT_KINDS: readonly ["audio-enrichment", "generic-file-processing"];
77
82
  export declare const SITE_BRAND_ASSET_USES: readonly ["logo", "social-image"];
83
+ export declare const AMBIENT_BACKGROUND_ROLES: readonly ["light-texture", "proof-band-dark", "cta-wash", "footer-detail", "style-atmosphere-1", "style-atmosphere-2"];
84
+ export declare const SITE_BACKGROUND_ASSET_USES: readonly ["selected-background", "light-texture", "proof-band-dark", "cta-wash", "footer-detail", "style-atmosphere-1", "style-atmosphere-2"];
78
85
  export declare const TEMPORARY_INGESTION_KINDS: readonly ["backup-zip", "newsletter-csv", "instagram-zip"];
79
86
  export type UploadIntent = {
80
87
  readonly tag: 'media-library';
@@ -1,4 +1,4 @@
1
- import type { MediaKind } from '@riverbankcms/media-storage-supabase';
1
+ import type { MediaAssetWithLabels, MediaKind } from '@riverbankcms/media-storage-supabase';
2
2
  import { type UploadIntentResolver, type VideoPrepIntentResolver } from '../../media-react/src/index';
3
3
  import type { VideoPrepIntent } from '../../media-core/src/index';
4
4
  import type { MediaValue } from './types';
@@ -19,8 +19,11 @@ export type MediaEditorProps = {
19
19
  fullWidth?: boolean;
20
20
  previewVariant?: 'default' | 'thumbnail';
21
21
  showRemoveAction?: boolean;
22
+ previewMaxWidth?: 'xs' | 'sm' | 'md' | 'none';
23
+ preventPreviewUpscale?: boolean;
24
+ onUploadComplete?: (asset: MediaAssetWithLabels) => void;
22
25
  uploadIntent?: UploadIntentResolver;
23
26
  videoPrepIntent?: VideoPrepIntentResolver;
24
27
  videoSelectionIntent?: VideoPrepIntent;
25
28
  };
26
- export declare const MediaEditor: ({ value, onChange, allowedKinds, previewAspectRatio, minSourceWidth, minSourceHeight, showAltInput, cropEditorMode, cropEditorAutoOpen, mediaPickerAutoOpen, showPreview, showActionOverlay, onEditDetails, fullWidth, previewVariant, showRemoveAction, uploadIntent, videoPrepIntent, videoSelectionIntent, }: MediaEditorProps) => import("react/jsx-runtime").JSX.Element;
29
+ export declare const MediaEditor: ({ value, onChange, allowedKinds, previewAspectRatio, minSourceWidth, minSourceHeight, showAltInput, cropEditorMode, cropEditorAutoOpen, mediaPickerAutoOpen, showPreview, showActionOverlay, onEditDetails, fullWidth, previewVariant, showRemoveAction, previewMaxWidth, preventPreviewUpscale, onUploadComplete, uploadIntent, videoPrepIntent, videoSelectionIntent, }: MediaEditorProps) => import("react/jsx-runtime").JSX.Element;
@@ -10,5 +10,7 @@ export type MediaPreviewProps = {
10
10
  variant?: 'default' | 'thumbnail';
11
11
  showRemoveAction?: boolean;
12
12
  showActionOverlay?: boolean;
13
+ previewMaxWidth?: 'xs' | 'sm' | 'md' | 'none';
14
+ preventUpscale?: boolean;
13
15
  };
14
- export declare const MediaPreview: ({ value, previewAspectRatio, onReplace, onEditCrop, onEditDetails, onRemove, fullWidth, variant, showRemoveAction, showActionOverlay, }: MediaPreviewProps) => import("react/jsx-runtime").JSX.Element;
16
+ export declare const MediaPreview: ({ value, previewAspectRatio, onReplace, onEditCrop, onEditDetails, onRemove, fullWidth, variant, showRemoveAction, showActionOverlay, previewMaxWidth, preventUpscale, }: MediaPreviewProps) => import("react/jsx-runtime").JSX.Element;
@@ -7,6 +7,8 @@ type MediaEditorFieldUi = {
7
7
  mediaPickerAutoOpen?: boolean;
8
8
  showMediaPreview?: boolean;
9
9
  showMediaOverlayActions?: boolean;
10
+ mediaPreviewMaxWidth?: 'xs' | 'sm' | 'md' | 'none';
11
+ preventMediaPreviewUpscale?: boolean;
10
12
  } & Record<string, unknown>;
11
13
  type MediaEditorFieldLike = {
12
14
  type?: string;
@@ -17,4 +19,7 @@ export declare function withRepeaterThumbnailMediaFieldUi<T extends MediaEditorF
17
19
  }): (T & {
18
20
  ui: MediaEditorFieldUi;
19
21
  }) | null;
22
+ export declare function withRepeaterStackMediaFieldUi<T extends MediaEditorFieldLike>(field: T): T & {
23
+ ui: MediaEditorFieldUi;
24
+ };
20
25
  export {};
@@ -13,6 +13,6 @@ export { MediaEditorContextProvider, useMediaEditor, useMediaEditorOptional, typ
13
13
  export { MediaEditorProvider } from './provider';
14
14
  export type { MediaEditorProviderProps } from './provider';
15
15
  export { createMediaEditorProvider } from './createMediaEditorProvider';
16
- export { withRepeaterThumbnailMediaFieldUi } from './fieldUi';
16
+ export { withRepeaterStackMediaFieldUi, withRepeaterThumbnailMediaFieldUi } from './fieldUi';
17
17
  export type { MediaValue, MediaTransform, MediaHotspot } from './types';
18
18
  export { DEFAULT_HOTSPOT } from './utils';
@@ -28,6 +28,7 @@ export type MediaLibraryProps = {
28
28
  uploader?: UseUploadsOptions['uploader'];
29
29
  maxParallelUploads?: number;
30
30
  getListOptions?: () => Partial<ListMediaAssetsOptions>;
31
+ onUploadComplete?: (asset: MediaAssetWithLabels) => void;
31
32
  children: (props: MediaLibraryRenderProps) => ReactNode;
32
33
  };
33
- export declare const MediaLibrary: ({ siteId, repo, pageSize, allowMultiSelect, uploader, maxParallelUploads, children, getListOptions, }: MediaLibraryProps) => import("react/jsx-runtime").JSX.Element;
34
+ export declare const MediaLibrary: ({ siteId, repo, pageSize, allowMultiSelect, uploader, maxParallelUploads, children, getListOptions, onUploadComplete, }: MediaLibraryProps) => import("react/jsx-runtime").JSX.Element;
@@ -17,5 +17,6 @@ export type MediaPickerMiniProps = {
17
17
  open?: boolean;
18
18
  onOpenChange?: (value: boolean) => void;
19
19
  getListOptions?: MediaLibraryProps['getListOptions'];
20
+ onUploadComplete?: MediaLibraryProps['onUploadComplete'];
20
21
  };
21
- export declare const MediaPickerMini: ({ siteId, repo, onPick, children, pageSize, uploader, autoCloseOnPick, open, onOpenChange, getListOptions, }: MediaPickerMiniProps) => import("react/jsx-runtime").JSX.Element;
22
+ export declare const MediaPickerMini: ({ siteId, repo, onPick, children, pageSize, uploader, autoCloseOnPick, open, onOpenChange, getListOptions, onUploadComplete, }: MediaPickerMiniProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,6 @@
1
1
  import type { AppearancePresetId, BoundaryOptionId, DesignBlockId, LayoutVariantKey, PageDesignEditorBlock, PageDesignEditorBoundary } from '../../../../theme-core/src/site-styles/index';
2
2
  import { type SystemCustomizeFacetId, type SystemCustomizeFacetTransition, type SystemCustomizeFacetValue } from '../../../../blocks/src/system/customize/facets';
3
+ import { type BackgroundImagePoolItem, type BackgroundOverride } from '../../../../blocks/src/system/customize/backgrounds';
3
4
  export type PreviewCustomizeCycleDirection = 'prev' | 'next';
4
5
  export type PreviewCustomizeAction = Readonly<{
5
6
  kind: 'set-layout';
@@ -15,6 +16,12 @@ export type PreviewCustomizeAction = Readonly<{
15
16
  blockId: DesignBlockId;
16
17
  baseContentId: string | null;
17
18
  } & SystemCustomizeFacetTransition> | Readonly<{
19
+ kind: 'set-background';
20
+ blockId: DesignBlockId;
21
+ override: BackgroundOverride;
22
+ fromOverride: BackgroundOverride;
23
+ baseContentId: string | null;
24
+ }> | Readonly<{
18
25
  kind: 'set-boundary';
19
26
  previousBlockId: DesignBlockId;
20
27
  nextBlockId: DesignBlockId;
@@ -33,6 +40,9 @@ type PreviewSetLookAction = Extract<PreviewCustomizeAction, {
33
40
  type PreviewSetBlockFacetAction = Extract<PreviewCustomizeAction, {
34
41
  kind: 'set-block-facet';
35
42
  }>;
43
+ type PreviewSetBackgroundAction = Extract<PreviewCustomizeAction, {
44
+ kind: 'set-background';
45
+ }>;
36
46
  type PreviewSetBoundaryAction = Extract<PreviewCustomizeAction, {
37
47
  kind: 'set-boundary';
38
48
  }>;
@@ -47,5 +57,12 @@ export declare function cyclePageDesignBlockFacet(input: Readonly<{
47
57
  currentValue: SystemCustomizeFacetValue;
48
58
  direction: PreviewCustomizeCycleDirection;
49
59
  }>): PreviewSetBlockFacetAction | null;
60
+ export declare function setPageDesignBlockBackground(input: Readonly<{
61
+ block: PageDesignEditorBlock;
62
+ override: BackgroundOverride;
63
+ currentContent?: Record<string, unknown> | null;
64
+ fromOverride?: BackgroundOverride;
65
+ imagePool?: readonly BackgroundImagePoolItem[];
66
+ }>): PreviewSetBackgroundAction | null;
50
67
  export declare function cyclePageDesignBoundaryBreak(boundary: PageDesignEditorBoundary, direction: PreviewCustomizeCycleDirection): PreviewSetBoundaryAction | PreviewResetBoundaryAction | null;
51
68
  export {};
@@ -1,4 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
+ import type { BackgroundImagePoolItem } from '../../../../blocks/src/system/customize/backgrounds';
2
3
  import { type ApiClient } from '../../../../api/src/request';
3
4
  import type { PreviewCustomizeAction } from '../blocks/previewCustomizeActions';
4
5
  import { type PreviewPageDesignEditorApplyOutcome, type PreviewPageDesignEditorState } from './previewCustomizeWorkflowState';
@@ -6,6 +7,9 @@ export type { PreviewPageDesignEditorApplyOutcome, PreviewPageDesignEditorState,
6
7
  type PageDesignEditorStateContextValue = Readonly<{
7
8
  state: PreviewPageDesignEditorState;
8
9
  reload: () => void;
10
+ backgroundImagePool: readonly BackgroundImagePoolItem[];
11
+ backgroundImagePoolStatus: 'idle' | 'loading' | 'loaded' | 'failed';
12
+ loadBackgroundImagePool: () => Promise<readonly BackgroundImagePoolItem[]>;
9
13
  applyAction: (action: PreviewCustomizeAction) => Promise<PreviewPageDesignEditorApplyOutcome>;
10
14
  undo: () => Promise<PreviewPageDesignEditorApplyOutcome>;
11
15
  redo: () => Promise<PreviewPageDesignEditorApplyOutcome>;
@@ -91,8 +91,9 @@ export declare function setPaletteOverrides(state: StyleConfiguratorState, palet
91
91
  /**
92
92
  * Records the post-compile resolved selection + any fallback warnings.
93
93
  * Used after `compileSiteThemeFromSelections` runs against a new site style:
94
- * the resolver may have auto-picked a different personality / palette if the
95
- * user's previous selections are not offered for the new style.
94
+ * the resolver may have auto-picked a different personality if the user's
95
+ * previous selection is not offered for the new style, or a different palette
96
+ * if the persisted palette ID is no longer known.
96
97
  *
97
98
  * Palette overrides are scoped by palette variant. If the resolver moves the
98
99
  * preview to a different palette, the current sparse overrides are stashed
@@ -2,6 +2,7 @@ import { type AppearancePresetId, type BoundaryOptionId, type DesignBlockId, typ
2
2
  import { type HistoryState } from '../../../../content-editor/src/index';
3
3
  import type { PreviewCustomizeAction } from '../blocks/previewCustomizeActions';
4
4
  import type { SystemCustomizeFacetHistorySelection } from '../../../../blocks/src/system/customize/facets';
5
+ import { type BackgroundOverride } from '../../../../blocks/src/system/customize/backgrounds';
5
6
  type PreviewLoadedEditorModel = PageDesignEditorReadModel;
6
7
  export type PreviewCustomizeHistoryEntry = Readonly<{
7
8
  kind: 'layout';
@@ -17,6 +18,11 @@ export type PreviewCustomizeHistoryEntry = Readonly<{
17
18
  kind: 'block-facet';
18
19
  blockId: PreviewCustomizeActionBlockId;
19
20
  } & SystemCustomizeFacetHistorySelection> | Readonly<{
21
+ kind: 'background';
22
+ blockId: PreviewCustomizeActionBlockId;
23
+ fromOverride: BackgroundOverride;
24
+ toOverride: BackgroundOverride;
25
+ }> | Readonly<{
20
26
  kind: 'boundary';
21
27
  boundaryId: DesignBoundaryId;
22
28
  previousBlockId: PreviewCustomizeActionBlockId;
@@ -1,3 +1,3 @@
1
- export declare const VALID_PUSH_SCOPES: readonly ["entries", "pages", "navigation", "forms", "theme", "footer", "venues", "event-categories", "events", "courses", "all"];
1
+ export declare const VALID_PUSH_SCOPES: readonly ["entries", "pages", "navigation", "forms", "settings", "theme", "footer", "venues", "event-categories", "events", "courses", "all"];
2
2
  export type PushScope = (typeof VALID_PUSH_SCOPES)[number];
3
3
  export declare function isValidPushScope(scope: string): scope is PushScope;
@@ -12,6 +12,8 @@ export interface MetadataUpdateFlags {
12
12
  willUpdateNavigation: boolean;
13
13
  /** Whether forms metadata should be updated (zero failures + some synced) */
14
14
  willUpdateForms: boolean;
15
+ /** Whether settings metadata should be updated (zero failures + settings synced) */
16
+ willUpdateSettings: boolean;
15
17
  /** Whether any metadata should be updated (at least one content type qualifies) */
16
18
  shouldUpdateMetadata: boolean;
17
19
  }
@@ -1,6 +1,6 @@
1
- import type { EntryMetadata, PagesMetadata, NavigationMetadata, FormsMetadata, LocalContent } from '../../content/reader';
1
+ import type { EntryMetadata, PagesMetadata, NavigationMetadata, FormsMetadata, LocalContent, SettingsMetadata } from '../../content/reader';
2
2
  import type { PulledContent } from '../../../client/management/types';
3
- export type StaleScope = 'entries' | 'pages' | 'navigation' | 'forms';
3
+ export type StaleScope = 'entries' | 'pages' | 'navigation' | 'settings' | 'forms';
4
4
  export interface StaleItem {
5
5
  scope: StaleScope;
6
6
  /** Only set for entries — the content type slug */
@@ -14,4 +14,4 @@ export interface StaleItem {
14
14
  * Check for stale content (remote is newer than local base)
15
15
  * @internal Exported for testing
16
16
  */
17
- export declare function checkForStaleContent(localContent: LocalContent, localMeta: Map<string, EntryMetadata>, pagesMeta: PagesMetadata | null, navigationMeta: NavigationMetadata | null, formsMeta: FormsMetadata | null, remoteContent: PulledContent): StaleItem[];
17
+ export declare function checkForStaleContent(localContent: LocalContent, localMeta: Map<string, EntryMetadata>, pagesMeta: PagesMetadata | null, navigationMeta: NavigationMetadata | null, formsMeta: FormsMetadata | null, remoteContent: PulledContent, settingsMeta?: SettingsMetadata | null): StaleItem[];
@@ -1,11 +1,18 @@
1
1
  import { type EnvTarget } from '../helpers';
2
2
  import type { OutputContext } from '../output';
3
+ import type { ContentSummary } from '../content/reader';
3
4
  import { type JsonDiffMode } from '../sync';
4
5
  import type { PushOptions } from './push/options';
5
6
  import { type PushScope } from './push/consts';
6
7
  export interface PushExecutionResult {
7
8
  success: boolean;
8
9
  }
10
+ export declare function noContentFoundWarningDetails(contentDir: string): Readonly<{
11
+ contentDir: string;
12
+ expectedFiles: readonly string[];
13
+ suggestion: string;
14
+ }>;
15
+ export declare function contentSummaryHasPushableContent(summary: ContentSummary): boolean;
9
16
  type MergeRemoteValidationInput = Readonly<{
10
17
  target: EnvTarget;
11
18
  pushScope: PushScope;
@@ -11,6 +11,7 @@
11
11
  * riverbankcms push pages # Push pages with blocks
12
12
  * riverbankcms push pages home # Push specific page with blocks
13
13
  * riverbankcms push navigation # Push navigation menus
14
+ * riverbankcms push settings # Push site settings
14
15
  * riverbankcms push footer # Push footer content
15
16
  * riverbankcms push theme # Push activeTheme from config (or 'current')
16
17
  * riverbankcms push theme modern # Push specific theme file
@@ -18,6 +19,7 @@
18
19
  * riverbankcms push --dry-run # Show what would be pushed
19
20
  */
20
21
  import { Command } from 'commander';
22
+ export { contentSummaryHasPushableContent, noContentFoundWarningDetails } from './push-execute';
21
23
  export { VALID_PUSH_SCOPES, isValidPushScope, type PushScope } from './push/consts';
22
24
  export { calculateMetadataUpdates, type MetadataUpdateFlags } from './push/metadata';
23
25
  export { filterLocalContent, type FilterResult } from './push/filter';
@@ -12,6 +12,7 @@ export interface LocalEntry {
12
12
  status?: 'draft' | 'published';
13
13
  hasUnpublishedChanges?: boolean;
14
14
  slug?: string;
15
+ manualOrder?: number;
15
16
  }
16
17
  export declare class LegacyEntryTitleError extends Error {
17
18
  readonly filePath: string;
@@ -376,6 +377,7 @@ export interface ContentSummary {
376
377
  export declare function getContentSummary(contentDir: string): Promise<ContentSummary>;
377
378
  export interface EntryMetadata {
378
379
  pulledAt: string;
380
+ manualOrder?: string[];
379
381
  entries: Record<string, {
380
382
  id?: string;
381
383
  createdAt?: string;
@@ -397,6 +399,10 @@ export interface NavigationMetadata {
397
399
  updatedAt?: string;
398
400
  }>;
399
401
  }
402
+ export interface SettingsMetadata {
403
+ pulledAt: string;
404
+ updatedAt: string | null;
405
+ }
400
406
  /**
401
407
  * Read metadata for a content type from .meta/ directory
402
408
  *
@@ -412,6 +418,13 @@ export declare function readEntriesMeta(contentDir: string, contentType: string)
412
418
  * @returns Map of content type to metadata
413
419
  */
414
420
  export declare function readAllMeta(contentDir: string): Promise<Map<string, EntryMetadata>>;
421
+ /**
422
+ * Read settings metadata from .meta/settings.json
423
+ *
424
+ * @param contentDir - Base content directory
425
+ * @returns Settings metadata or null if not found
426
+ */
427
+ export declare function readSettingsMeta(contentDir: string): Promise<SettingsMetadata | null>;
415
428
  /**
416
429
  * Read pages metadata from .meta/pages.json
417
430
  *
@@ -50,7 +50,7 @@ export declare function writeNavigation(contentDir: string, pulledNavigation: Pu
50
50
  *
51
51
  * Format: content/settings.json
52
52
  */
53
- export declare function writeSettings(contentDir: string, pulledSettings: PulledSettings): Promise<string>;
53
+ export declare function writeSettings(contentDir: string, pulledSettings: PulledSettings, options?: WriterOptions): Promise<string>;
54
54
  /**
55
55
  * Write forms to content directory
56
56
  *
@@ -195,6 +195,7 @@ export declare function updateMetadataAfterPush(contentDir: string, remoteConten
195
195
  updatedAt: string;
196
196
  createdAt?: string;
197
197
  }>;
198
+ settingsUpdatedAt?: string | null;
198
199
  forms?: Array<{
199
200
  slug: string;
200
201
  updatedAt: string;
@@ -97,6 +97,7 @@ export interface PulledEntryOutput {
97
97
  slug?: string;
98
98
  /** Resolved title (routable title when present, otherwise content title) */
99
99
  title: string;
100
+ manualOrder?: number;
100
101
  }
101
102
  /**
102
103
  * Map an entry from API response to pull output format.
@@ -109,6 +110,7 @@ export declare function mapEntryForOutput<T extends {
109
110
  hasUnpublishedChanges: boolean;
110
111
  slug?: string;
111
112
  title: string;
113
+ manualOrder?: number;
112
114
  }>(entry: T): PulledEntryOutput;
113
115
  /**
114
116
  * Parse pagination options from command flags.
@@ -0,0 +1,11 @@
1
+ import { navigationMenuIdentity, type NavigationMenuIdentity, type NavigationMenuIdentityInput } from '../../../api/src/navigation';
2
+ import { type Result } from '../../../core/src/index';
3
+ export type NavigationIdentityInput = NavigationMenuIdentityInput;
4
+ export type DuplicateNavigationIdentityError = Readonly<{
5
+ code: 'duplicate_navigation_identity';
6
+ identity: NavigationMenuIdentity;
7
+ menuNames: readonly string[];
8
+ }>;
9
+ export declare const navigationIdentity: typeof navigationMenuIdentity;
10
+ export declare function navigationIdentityMap<T extends NavigationIdentityInput>(menus: readonly T[]): Result<ReadonlyMap<NavigationMenuIdentity, T>, DuplicateNavigationIdentityError>;
11
+ export declare function duplicateNavigationIdentityMessage(error: DuplicateNavigationIdentityError): string;
@@ -5,9 +5,9 @@ export type CliPageIdentifier = Brand<string, 'SdkCliPageIdentifier'>;
5
5
  export type CliBlockIdentifier = Brand<string, 'SdkCliBlockIdentifier'>;
6
6
  export type CliFormSlug = Brand<string, 'SdkCliFormSlug'>;
7
7
  export type CliNavigationMenuName = Brand<string, 'SdkCliNavigationMenuName'>;
8
- export declare const asCliContentTypeKey: (value: string) => CliContentTypeKey;
9
- export declare const asCliEntryIdentifier: (value: string) => CliEntryIdentifier;
10
- export declare const asCliPageIdentifier: (value: string) => CliPageIdentifier;
11
- export declare const asCliBlockIdentifier: (value: string) => CliBlockIdentifier;
12
- export declare const asCliFormSlug: (value: string) => CliFormSlug;
13
- export declare const asCliNavigationMenuName: (value: string) => CliNavigationMenuName;
8
+ export declare const unsafeAsCliContentTypeKey: (value: string) => CliContentTypeKey;
9
+ export declare const unsafeAsCliEntryIdentifier: (value: string) => CliEntryIdentifier;
10
+ export declare const unsafeAsCliPageIdentifier: (value: string) => CliPageIdentifier;
11
+ export declare const unsafeAsCliBlockIdentifier: (value: string) => CliBlockIdentifier;
12
+ export declare const unsafeAsCliFormSlug: (value: string) => CliFormSlug;
13
+ export declare const unsafeAsCliNavigationMenuName: (value: string) => CliNavigationMenuName;