@riverbankcms/sdk 0.62.2 → 0.62.4

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 (111) hide show
  1. package/dist/_dts/api/src/accessAdmin.d.ts +7 -0
  2. package/dist/_dts/api/src/bookingClosures.d.ts +106 -0
  3. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +18 -0
  4. package/dist/_dts/api/src/bookingRecords.d.ts +1 -1
  5. package/dist/_dts/api/src/calendar.d.ts +11 -1
  6. package/dist/_dts/api/src/contentRuntime.d.ts +2 -0
  7. package/dist/_dts/api/src/contentVersionHistory.d.ts +52 -0
  8. package/dist/_dts/api/src/contentVersionHistoryClient.d.ts +45 -0
  9. package/dist/_dts/api/src/endpoints.d.ts +110 -6
  10. package/dist/_dts/api/src/index.d.ts +4 -1
  11. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +31 -7
  12. package/dist/_dts/api/src/siteMembers.d.ts +10 -1
  13. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +33 -12
  14. package/dist/_dts/api/src/types.d.ts +2 -1
  15. package/dist/_dts/api/src/url.d.ts +3 -3
  16. package/dist/_dts/blocks/src/bindings/index.d.ts +2 -2
  17. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.state.d.ts +12 -0
  18. package/dist/_dts/blocks/src/system/runtime/shared/components/FieldValidationMessage.d.ts +19 -0
  19. package/dist/_dts/blocks/src/system/runtime/shared/components/TerminalPanel.d.ts +8 -2
  20. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +3 -1
  21. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  22. package/dist/_dts/blocks/src/system/transforms/registry/_utils/themeColorResolution.d.ts +7 -0
  23. package/dist/_dts/content-editor/src/hooks/useDebouncedLatestSave.d.ts +24 -0
  24. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  25. package/dist/_dts/content-editor/src/ui/stores/autosaveStore.d.ts +1 -0
  26. package/dist/_dts/content-editor/src/ui/stores/types.d.ts +1 -0
  27. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +208 -0
  28. package/dist/_dts/db/src/schemas/forms.d.ts +1 -0
  29. package/dist/_dts/preview-next/src/client/blocks/BlockToolbar.d.ts +2 -1
  30. package/dist/_dts/preview-next/src/client/blocks/composer/composePageFromBlocks.d.ts +2 -1
  31. package/dist/_dts/preview-next/src/client/blocks/composer/index.d.ts +2 -2
  32. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +2 -1
  33. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +31 -8
  34. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +6 -5
  35. package/dist/_dts/preview-next/src/client/blocks/previewProjection/aiProposalProjection.d.ts +7 -0
  36. package/dist/_dts/preview-next/src/client/blocks/previewProjection/applyPreviewProjections.d.ts +7 -0
  37. package/dist/_dts/preview-next/src/client/blocks/previewProjection/index.d.ts +4 -0
  38. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +5 -0
  39. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +72 -0
  40. package/dist/_dts/preview-next/src/client/index.d.ts +1 -1
  41. package/dist/_dts/preview-next/src/client/layout/PreviewLayoutContext.d.ts +6 -5
  42. package/dist/_dts/preview-next/src/client/preview/PageDesignEditorStateContext.d.ts +2 -1
  43. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +11 -1
  44. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +9 -5
  45. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +6 -1
  46. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +13 -2
  47. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +7 -1
  48. package/dist/_dts/preview-next/src/client/preview/previewCustomizeControlStyles.d.ts +1 -0
  49. package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +1 -0
  50. package/dist/_dts/preview-next/src/client/preview/previewCustomizeRuntimePatch.d.ts +9 -1
  51. package/dist/_dts/preview-next/src/client/preview/previewCustomizeWorkflowState.d.ts +13 -0
  52. package/dist/_dts/preview-next/src/client/preview/sidebarTabPreference.d.ts +8 -2
  53. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +49 -0
  54. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -1
  55. package/dist/_dts/sdk/src/version.d.ts +1 -1
  56. package/dist/_dts/surfaces/src/index.d.ts +1 -0
  57. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  58. package/dist/_dts/theme-core/src/index.d.ts +1 -1
  59. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +2 -21
  60. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +3 -67
  61. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +4 -62
  62. package/dist/_dts/theme-core/src/site-styles/appearancePresets.d.ts +1 -1
  63. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +24 -0
  64. package/dist/_dts/theme-core/src/site-styles/customizableSurfaces.d.ts +94 -0
  65. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +59 -0
  66. package/dist/_dts/theme-core/src/site-styles/generatedDesignPipeline.d.ts +4 -0
  67. package/dist/_dts/theme-core/src/site-styles/headerCtaVariants.d.ts +3 -0
  68. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +155 -0
  69. package/dist/_dts/theme-core/src/site-styles/headerOpeningSection.d.ts +15 -0
  70. package/dist/_dts/theme-core/src/site-styles/index.d.ts +6 -0
  71. package/dist/_dts/theme-core/src/site-styles/pageDesignAuthority.d.ts +7 -0
  72. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +25 -0
  73. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +15 -1
  74. package/dist/_dts/theme-core/src/site-styles/records.d.ts +1 -0
  75. package/dist/_dts/theme-core/src/site-styles/siteStyleBlockPolicies.d.ts +96 -0
  76. package/dist/_dts/theme-core/src/site-styles/types.d.ts +1 -2
  77. package/dist/_dts/theme-core/src/siteChrome.d.ts +44 -2
  78. package/dist/_dts/theme-core/src/tokens/colorTokenParts.d.ts +13 -0
  79. package/dist/_dts/theme-core/src/tokens/index.d.ts +2 -0
  80. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +29 -0
  81. package/dist/_dts/theme-core/src/utils/tokenOrColor.d.ts +27 -1
  82. package/dist/cli/index.mjs +1139 -471
  83. package/dist/client/bookings.mjs +519 -368
  84. package/dist/client/client.mjs +4507 -3535
  85. package/dist/client/hooks.mjs +2634 -2035
  86. package/dist/client/rendering/client.mjs +4413 -3549
  87. package/dist/client/rendering/islands.mjs +3456 -2589
  88. package/dist/client/rendering.mjs +4921 -3949
  89. package/dist/preview-next/before-render.mjs +138 -6
  90. package/dist/preview-next/client/runtime.mjs +3541 -1573
  91. package/dist/preview-next/editor-base.css +31 -0
  92. package/dist/preview-next/middleware.mjs +131 -6
  93. package/dist/server/components.mjs +3214 -2560
  94. package/dist/server/config-validation.mjs +2859 -2260
  95. package/dist/server/config.mjs +2859 -2260
  96. package/dist/server/data.mjs +2634 -2035
  97. package/dist/server/index.mjs +132 -7
  98. package/dist/server/next.mjs +2983 -2329
  99. package/dist/server/page-converter.mjs +2478 -2029
  100. package/dist/server/prebuild.mjs +1 -1
  101. package/dist/server/rendering/server.mjs +3214 -2560
  102. package/dist/server/rendering.mjs +3233 -2579
  103. package/dist/server/routing.mjs +2725 -2028
  104. package/dist/server/server.mjs +2636 -2037
  105. package/dist/server/theme-bridge.mjs +1250 -767
  106. package/dist/server/theme.mjs +623 -498
  107. package/dist/styles/index.css +33 -0
  108. package/package.json +1 -1
  109. package/dist/_dts/blocks/src/system/transforms/registry/_utils/colorResolution.d.ts +0 -13
  110. package/dist/_dts/preview-next/src/client/blocks/overlay.d.ts +0 -30
  111. package/dist/_dts/theme-core/src/site-styles/siteChromeAppearancePresets.d.ts +0 -67
@@ -1,14 +1,15 @@
1
1
  import type { BlockItem } from '@riverbankcms/editor-blocks';
2
- import { type CompiledBlockRuntimeFields, type DesignBlockId, type PageDesignEditorReadModel } from '@riverbankcms/theme-core/site-styles/previewCompiler';
2
+ import type { PageDesignEditorReadModel } from '@riverbankcms/theme-core/site-styles/previewCompiler';
3
3
  import type { PreviewPageDesignEditorState } from '../preview/PageDesignEditorStateContext';
4
- type RuntimeFieldsByBlockId = ReadonlyMap<DesignBlockId, CompiledBlockRuntimeFields>;
5
- type RuntimePreviewSource = Readonly<{
4
+ import { type RuntimeContentDecorationProjection } from './previewProjection';
5
+ export type RuntimePreviewSource = Readonly<{
6
6
  kind: 'preserve-server-runtime';
7
7
  }> | Readonly<{
8
8
  kind: 'apply-editor-model';
9
9
  editorModel: PageDesignEditorReadModel;
10
10
  }>;
11
11
  export declare function applyPageDesignRuntimeFieldsToBlockItems(blockItems: readonly BlockItem[], source: RuntimePreviewSource): BlockItem[];
12
- export declare function buildPageDesignRuntimeFieldsByBlockId(editorModel: PageDesignEditorReadModel): RuntimeFieldsByBlockId;
12
+ export declare function applyPageDesignRuntimeFieldsToBlockContent(block: BlockItem, content: Record<string, unknown> | null, source: RuntimePreviewSource): Record<string, unknown> | null;
13
+ export declare function buildPageDesignRuntimeFieldsByBlockId(editorModel: PageDesignEditorReadModel): RuntimeContentDecorationProjection['fieldsByBlockId'];
14
+ export declare function pageDesignRuntimeProjectionFromSource(source: RuntimePreviewSource): RuntimeContentDecorationProjection | null;
13
15
  export declare function resolveRuntimePreviewSource(pageDesignState: PreviewPageDesignEditorState): RuntimePreviewSource;
14
- export {};
@@ -0,0 +1,7 @@
1
+ import type { EditorBlockId } from '@riverbankcms/core';
2
+ import type { BlockItem } from '@riverbankcms/editor-blocks';
3
+ import type { AiProposalProjectionState, CanonicalBlockContent, ContentFieldOverrideProjection, PreviewProjection, PreviewRenderContent, StructureProjection } from './types';
4
+ export declare function previewProjectionsFromAiOverlays(overlays: AiProposalProjectionState | null | undefined): PreviewProjection[];
5
+ export declare function applyStructureProjection(blockItems: readonly BlockItem[], projection: StructureProjection): BlockItem[];
6
+ export declare function applyContentFieldOverrideProjection(blockId: EditorBlockId, content: CanonicalBlockContent | PreviewRenderContent | null, projection: ContentFieldOverrideProjection): PreviewRenderContent | CanonicalBlockContent | null;
7
+ export declare function blockHasContentFieldOverrideProjection(blockId: EditorBlockId, projection: ContentFieldOverrideProjection): boolean;
@@ -0,0 +1,7 @@
1
+ import type { EditorBlockId } from '@riverbankcms/core';
2
+ import type { BlockItem } from '@riverbankcms/editor-blocks';
3
+ import type { CanonicalBlockContent, PreviewProjection, PreviewRenderContent } from './types';
4
+ export declare function applyPreviewStructureProjections(blockItems: readonly BlockItem[], projections: readonly PreviewProjection[]): BlockItem[];
5
+ export declare function applyPreviewContentFieldProjections(blockId: EditorBlockId, content: CanonicalBlockContent | null, projections: readonly PreviewProjection[]): CanonicalBlockContent | PreviewRenderContent | null;
6
+ export declare function applyPreviewRuntimeContentProjections(block: BlockItem, content: CanonicalBlockContent | PreviewRenderContent | null, projections: readonly PreviewProjection[]): CanonicalBlockContent | PreviewRenderContent | null;
7
+ export declare function blockHasPreviewContentFieldProjection(blockId: EditorBlockId, projections: readonly PreviewProjection[]): boolean;
@@ -0,0 +1,4 @@
1
+ export { applyContentFieldOverrideProjection, applyStructureProjection, blockHasContentFieldOverrideProjection, previewProjectionsFromAiOverlays, } from './aiProposalProjection';
2
+ export { applyPreviewContentFieldProjections, applyPreviewRuntimeContentProjections, applyPreviewStructureProjections, blockHasPreviewContentFieldProjection, } from './applyPreviewProjections';
3
+ export { applyRuntimeContentDecorationProjection, runtimeContentDecorationProjectionFromEditorModel, } from './runtimeContentDecoration';
4
+ export type { AiProposalProjectionState, CanonicalBlockContent, ContentFieldOverrideProjection, PreviewFieldOverride, PreviewProjection, PreviewProjectionAddedBlock, PreviewRenderContent, RuntimeContentDecorationProjection, StructureProjection, } from './types';
@@ -0,0 +1,5 @@
1
+ import type { BlockItem } from '@riverbankcms/editor-blocks';
2
+ import { type PageDesignEditorReadModel } from '@riverbankcms/theme-core/site-styles/previewCompiler';
3
+ import type { CanonicalBlockContent, PreviewRenderContent, RuntimeContentDecorationProjection } from './types';
4
+ export declare function runtimeContentDecorationProjectionFromEditorModel(editorModel: PageDesignEditorReadModel): RuntimeContentDecorationProjection;
5
+ export declare function applyRuntimeContentDecorationProjection(block: BlockItem, content: CanonicalBlockContent | PreviewRenderContent | null, projection: RuntimeContentDecorationProjection): PreviewRenderContent;
@@ -0,0 +1,72 @@
1
+ import type { EditorBlockId } from '@riverbankcms/core';
2
+ import type { BlockItem } from '@riverbankcms/editor-blocks';
3
+ import type { CompiledBlockRuntimeFields, DesignBlockId } from '@riverbankcms/theme-core/site-styles/previewCompiler';
4
+ export type CanonicalBlockContent = Record<string, unknown> & {
5
+ readonly __contentAuthority?: 'canonical-block-content';
6
+ };
7
+ export type PreviewRenderContent = Record<string, unknown> & {
8
+ readonly __contentAuthority?: 'preview-render-content';
9
+ };
10
+ export type PreviewFieldOverride = Readonly<{
11
+ proposalId: string;
12
+ before: unknown;
13
+ after: unknown;
14
+ }>;
15
+ export type AiProposalProjectionState = Readonly<{
16
+ viewMode: 'before' | 'after';
17
+ overrides: ReadonlyMap<string, PreviewFieldOverride>;
18
+ structure?: AiStructureProjectionInput | null;
19
+ }>;
20
+ export type AiStructureProjectionInput = Readonly<{
21
+ proposalId: string;
22
+ includeUnspecified?: boolean;
23
+ before: Readonly<{
24
+ blockIds: readonly string[];
25
+ }>;
26
+ after: Readonly<{
27
+ blockIds: readonly string[];
28
+ addedBlocks?: readonly PreviewProjectionAddedBlock[];
29
+ }>;
30
+ }>;
31
+ export type PreviewProjectionAddedBlock = Readonly<{
32
+ id: string;
33
+ kind: string;
34
+ content?: CanonicalBlockContent | null;
35
+ }>;
36
+ export type PreviewProjection = Readonly<{
37
+ kind: 'structure-overlay';
38
+ source: 'ai-proposal';
39
+ viewMode: 'before' | 'after';
40
+ proposalId: string;
41
+ includeUnspecified?: boolean;
42
+ before: Readonly<{
43
+ blockIds: readonly string[];
44
+ }>;
45
+ after: Readonly<{
46
+ blockIds: readonly string[];
47
+ addedBlocks?: readonly PreviewProjectionAddedBlock[];
48
+ }>;
49
+ }> | Readonly<{
50
+ kind: 'content-field-overrides';
51
+ source: 'ai-proposal';
52
+ viewMode: 'before' | 'after';
53
+ overrides: ReadonlyMap<string, PreviewFieldOverride>;
54
+ }> | Readonly<{
55
+ kind: 'runtime-content-decoration';
56
+ source: 'page-design';
57
+ fieldsByBlockId: ReadonlyMap<DesignBlockId, CompiledBlockRuntimeFields>;
58
+ }>;
59
+ export type StructureProjection = Extract<PreviewProjection, {
60
+ kind: 'structure-overlay';
61
+ }>;
62
+ export type ContentFieldOverrideProjection = Extract<PreviewProjection, {
63
+ kind: 'content-field-overrides';
64
+ }>;
65
+ export type RuntimeContentDecorationProjection = Extract<PreviewProjection, {
66
+ kind: 'runtime-content-decoration';
67
+ }>;
68
+ export type ContentProjectionTarget = Readonly<{
69
+ block: BlockItem;
70
+ editorBlockId: EditorBlockId | null;
71
+ content: CanonicalBlockContent | null;
72
+ }>;
@@ -8,7 +8,7 @@ export { PreviewShellSmoke } from "./PreviewShellSmoke";
8
8
  export { PreviewLayoutProvider, usePreviewLayout, } from "./layout/PreviewLayoutContext";
9
9
  export { useOptionalPreviewLayout } from "./layout/PreviewLayoutContext";
10
10
  export { previewAssistantEnabled, resolvePreviewSidebarTab, } from "./preview/assistantAvailability";
11
- export type { PreviewSidebarTab } from "./preview/sidebarTabPreference";
11
+ export type { PreviewDesignRow, PreviewSidebarOpenRequest, PreviewSidebarTab, } from "./preview/sidebarTabPreference";
12
12
  export { getPreviewSidebarTab, onPreviewSidebarOpenRequest, requestPreviewSidebarOpen, setPreviewSidebarTab, } from "./preview/sidebarTabPreference";
13
13
  export type { PreviewViewportControlsProps, ViewportMode, ViewportWidth, } from "./preview/PreviewViewportControls";
14
14
  export { PreviewViewportControls } from "./preview/PreviewViewportControls";
@@ -1,17 +1,18 @@
1
1
  import { type ReactNode } from 'react';
2
- import type { SiteChromeLayoutNodes } from '@riverbankcms/theme-core/siteChrome';
3
- type PreviewLayoutContextValue = SiteChromeLayoutNodes | null;
4
- export declare function PreviewLayoutProvider({ headerNode, bannerNode, bannerShellBehavior, footerNode, children, }: {
2
+ type PreviewLayoutContextValue = Readonly<{
3
+ headerNode: ReactNode;
4
+ bannerNode?: ReactNode;
5
+ footerNode: ReactNode;
6
+ }> | null;
7
+ export declare function PreviewLayoutProvider({ headerNode, bannerNode, footerNode, children, }: {
5
8
  headerNode: ReactNode;
6
9
  bannerNode?: ReactNode;
7
- bannerShellBehavior?: SiteChromeLayoutNodes['bannerShellBehavior'];
8
10
  footerNode: ReactNode;
9
11
  children: ReactNode;
10
12
  }): import("react/jsx-runtime").JSX.Element;
11
13
  export declare function usePreviewLayout(): Readonly<{
12
14
  headerNode: ReactNode;
13
15
  bannerNode?: ReactNode;
14
- bannerShellBehavior?: import("@riverbankcms/blocks").SiteTopShellBehavior;
15
16
  footerNode: ReactNode;
16
17
  }>;
17
18
  export declare function useOptionalPreviewLayout(): PreviewLayoutContextValue;
@@ -17,11 +17,12 @@ type PageDesignEditorStateContextValue = Readonly<{
17
17
  }>;
18
18
  export declare const PREVIEW_CUSTOMIZE_STALE_MESSAGE = "This page changed since that design choice. Refresh the preview, then try again.";
19
19
  export { applyPreviewCustomizeActionToState } from './previewCustomizeWorkflowState';
20
- export declare function PreviewPageDesignEditorStateProvider({ apiClient, siteId, pageId, enabled, children, }: Readonly<{
20
+ export declare function PreviewPageDesignEditorStateProvider({ apiClient, siteId, pageId, enabled, autosaveDelayMs, children, }: Readonly<{
21
21
  apiClient: ApiClient;
22
22
  siteId: string;
23
23
  pageId: string | null;
24
24
  enabled: boolean;
25
+ autosaveDelayMs?: number;
25
26
  children: ReactNode;
26
27
  }>): import("react/jsx-runtime").JSX.Element;
27
28
  export declare function usePreviewPageDesignEditorState(): PageDesignEditorStateContextValue;
@@ -7,6 +7,8 @@ import { type ContentTypeSchema } from "@riverbankcms/content-model";
7
7
  import { type ZoomLevel } from "@riverbankcms/content-editor";
8
8
  import type { ButtonPersonalityId } from "@riverbankcms/theme-core/buttons";
9
9
  import type { PaletteOverrides, PaletteVariantId } from "@riverbankcms/theme-core/palette";
10
+ import type { FooterSelectionContext, FooterLookId, HeaderSelectionContext, HeaderLookId } from "@riverbankcms/theme-core/site-styles";
11
+ import type { PreviewDesignRow } from "./sidebarTabPreference";
10
12
  import type { ViewportMode, ViewportWidth } from "./PreviewViewportControls";
11
13
  import { type SiteStyleAccess } from "./siteStyleAccess";
12
14
  export type PreviewEditorSidebarTab = "editor" | "assistant";
@@ -35,6 +37,14 @@ export type PreviewEditorSidebarProps = {
35
37
  themeSelectionButtonPersonalityId?: ButtonPersonalityId | null;
36
38
  themeSelectionPaletteVariantId?: PaletteVariantId | null;
37
39
  themeSelectionPaletteOverrides?: PaletteOverrides | null;
40
+ themeSelectionHeaderLookId?: HeaderLookId | null;
41
+ themeSelectionFooterLookId?: FooterLookId | null;
42
+ themeSelectionHeaderContext?: Partial<HeaderSelectionContext>;
43
+ themeSelectionFooterContext?: Partial<FooterSelectionContext>;
44
+ designRowRequest?: Readonly<{
45
+ id: number;
46
+ row: PreviewDesignRow;
47
+ }> | null;
38
48
  apiClient: ApiClient;
39
49
  bearerToken?: string | null;
40
50
  supabaseUrl?: string;
@@ -53,4 +63,4 @@ export type PreviewEditorSidebarProps = {
53
63
  onViewportWidthChange: (width: ViewportWidth) => void;
54
64
  onZoomChange: (zoom: ZoomLevel) => void;
55
65
  };
56
- export declare function PreviewEditorSidebar({ surfaceId, siteId, dashboardBaseUrl, pageId, entryData, contentTypeSchema, referenceContentTypeKeys, draftContent, currentTemplate, theme, themeId, themeSelectionId, themeSelectionButtonPersonalityId, themeSelectionPaletteVariantId, themeSelectionPaletteOverrides, apiClient, bearerToken, supabaseUrl, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, siteStyleAccess, activeTab, onTabChange, onClose, viewportMode, viewportWidth, zoom, onViewportModeChange, onViewportWidthChange, onZoomChange, }: PreviewEditorSidebarProps): import("react/jsx-runtime").JSX.Element;
66
+ export declare function PreviewEditorSidebar({ surfaceId, siteId, dashboardBaseUrl, pageId, entryData, contentTypeSchema, referenceContentTypeKeys, draftContent, currentTemplate, theme, themeId, themeSelectionId, themeSelectionButtonPersonalityId, themeSelectionPaletteVariantId, themeSelectionPaletteOverrides, themeSelectionHeaderLookId, themeSelectionFooterLookId, themeSelectionHeaderContext, themeSelectionFooterContext, designRowRequest, apiClient, bearerToken, supabaseUrl, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, siteStyleAccess, activeTab, onTabChange, onClose, viewportMode, viewportWidth, zoom, onViewportModeChange, onViewportWidthChange, onZoomChange, }: PreviewEditorSidebarProps): import("react/jsx-runtime").JSX.Element;
@@ -2,6 +2,7 @@ import { type ComponentProps, type ReactNode } from "react";
2
2
  import { BlockApiProvider } from "@riverbankcms/blocks/client";
3
3
  import type { ButtonPersonalityId } from "@riverbankcms/theme-core/buttons";
4
4
  import type { PaletteOverrides, PaletteVariantId } from "@riverbankcms/theme-core/palette";
5
+ import type { FooterSelectionContext, FooterLookId, HeaderSelectionContext, HeaderLookId } from "@riverbankcms/theme-core/site-styles";
5
6
  import type { EntrySubrouteContextData, MediaAssetIndexItem, Theme } from "@riverbankcms/blocks";
6
7
  import type { ContentTypeSchema } from "@riverbankcms/content-model";
7
8
  import type { SdkConfigForBlockPicker } from "@riverbankcms/editor-blocks";
@@ -34,14 +35,17 @@ export type PreviewShellProps = {
34
35
  themeId?: string | null;
35
36
  themeSelectionId?: string | null;
36
37
  /**
37
- * Persisted Style configurator selections (Phase C). Forwarded into the
38
- * StyleConfigurator so reload renders the user's saved button personality
39
- * + palette variant + sparse overrides instead of falling back to the
40
- * site style defaults.
38
+ * Persisted Style configurator selections. Forwarded into StyleConfigurator
39
+ * so reload renders the user's saved button personality, palette variant,
40
+ * and sparse overrides instead of falling back to the site style defaults.
41
41
  */
42
42
  themeSelectionButtonPersonalityId?: ButtonPersonalityId | null;
43
43
  themeSelectionPaletteVariantId?: PaletteVariantId | null;
44
44
  themeSelectionPaletteOverrides?: PaletteOverrides | null;
45
+ themeSelectionHeaderLookId?: HeaderLookId | null;
46
+ themeSelectionFooterLookId?: FooterLookId | null;
47
+ themeSelectionHeaderContext?: Partial<HeaderSelectionContext>;
48
+ themeSelectionFooterContext?: Partial<FooterSelectionContext>;
45
49
  pageId: string | null;
46
50
  routeId: string | null;
47
51
  entryData?: PreviewContentEntryData | null;
@@ -63,7 +67,7 @@ export type PreviewShellProps = {
63
67
  designEditorEligibility?: PreviewDesignEditorEligibility;
64
68
  baseFetch?: BaseFetch;
65
69
  };
66
- export declare function PreviewShell({ children, apiBaseUrl, blockApiConfig, siteId, siteSlug, editableId, previewSession, previewToken, dashboardBaseUrl, surfaceId, theme, themeId, themeSelectionId, themeSelectionButtonPersonalityId, themeSelectionPaletteVariantId, themeSelectionPaletteOverrides, pageId, routeId, entryData, contentTypeSchema, referenceContentTypeKeys, draftContent, currentTemplate, initialStatus, initialBlocks, pageMetadata, isSiteLaunched, maintenanceModeEnabled, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, supabaseUrl, useThemeScope, designEditorEligibility, baseFetch, }: PreviewShellProps): import("react/jsx-runtime").JSX.Element;
70
+ export declare function PreviewShell({ children, apiBaseUrl, blockApiConfig, siteId, siteSlug, editableId, previewSession, previewToken, dashboardBaseUrl, surfaceId, theme, themeId, themeSelectionId, themeSelectionButtonPersonalityId, themeSelectionPaletteVariantId, themeSelectionPaletteOverrides, themeSelectionHeaderLookId, themeSelectionFooterLookId, themeSelectionHeaderContext, themeSelectionFooterContext, pageId, routeId, entryData, contentTypeSchema, referenceContentTypeKeys, draftContent, currentTemplate, initialStatus, initialBlocks, pageMetadata, isSiteLaunched, maintenanceModeEnabled, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, supabaseUrl, useThemeScope, designEditorEligibility, baseFetch, }: PreviewShellProps): import("react/jsx-runtime").JSX.Element;
67
71
  export declare function defaultDesignEditorEligibility(input: Readonly<{
68
72
  pageId: string | null;
69
73
  entryData?: PreviewContentEntryData | null;
@@ -2,6 +2,7 @@ import { type ReactNode } from "react";
2
2
  import { type EntrySubrouteContextData, type MediaAssetIndexItem, type Theme } from "@riverbankcms/blocks";
3
3
  import type { ButtonPersonalityId } from "@riverbankcms/theme-core/buttons";
4
4
  import type { PaletteOverrides, PaletteVariantId } from "@riverbankcms/theme-core/palette";
5
+ import type { FooterSelectionContext, HeaderSelectionContext, FooterLookId, HeaderLookId } from "@riverbankcms/theme-core/site-styles";
5
6
  import type { ContentTypeSchema } from "@riverbankcms/content-model";
6
7
  import type { ApiClient } from "@riverbankcms/api/request";
7
8
  import type { SdkConfigForBlockPicker } from "@riverbankcms/editor-blocks";
@@ -27,6 +28,10 @@ export type PreviewShellLayoutProps = {
27
28
  themeSelectionButtonPersonalityId?: ButtonPersonalityId | null;
28
29
  themeSelectionPaletteVariantId?: PaletteVariantId | null;
29
30
  themeSelectionPaletteOverrides?: PaletteOverrides | null;
31
+ themeSelectionHeaderLookId?: HeaderLookId | null;
32
+ themeSelectionFooterLookId?: FooterLookId | null;
33
+ themeSelectionHeaderContext?: Partial<HeaderSelectionContext>;
34
+ themeSelectionFooterContext?: Partial<FooterSelectionContext>;
30
35
  supabaseUrl?: string;
31
36
  isSiteLaunched: boolean;
32
37
  maintenanceModeEnabled: boolean;
@@ -37,4 +42,4 @@ export type PreviewShellLayoutProps = {
37
42
  useThemeScope?: boolean;
38
43
  siteStyleAccess?: SiteStyleAccess;
39
44
  };
40
- export declare function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseUrl, pageId, entryData, contentTypeSchema, referenceContentTypeKeys, draftContent, currentTemplate, apiClient, bearerToken, themeId, themeSelectionId, themeSelectionButtonPersonalityId, themeSelectionPaletteVariantId, themeSelectionPaletteOverrides, supabaseUrl, isSiteLaunched, maintenanceModeEnabled, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, useThemeScope, siteStyleAccess, }: PreviewShellLayoutProps): import("react/jsx-runtime").JSX.Element;
45
+ export declare function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseUrl, pageId, entryData, contentTypeSchema, referenceContentTypeKeys, draftContent, currentTemplate, apiClient, bearerToken, themeId, themeSelectionId, themeSelectionButtonPersonalityId, themeSelectionPaletteVariantId, themeSelectionPaletteOverrides, themeSelectionHeaderLookId, themeSelectionFooterLookId, themeSelectionHeaderContext, themeSelectionFooterContext, supabaseUrl, isSiteLaunched, maintenanceModeEnabled, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, useThemeScope, siteStyleAccess, }: PreviewShellLayoutProps): import("react/jsx-runtime").JSX.Element;
@@ -2,19 +2,30 @@ import type { ApiClient } from '@riverbankcms/api/request';
2
2
  import type { Theme } from '@riverbankcms/blocks';
3
3
  import { type ButtonPersonalityId } from '@riverbankcms/theme-core/buttons';
4
4
  import { type PaletteVariantId, type PaletteOverrides } from '@riverbankcms/theme-core/palette';
5
+ import { type FooterSelectionContext, type FooterLookId, type HeaderSelectionContext, type HeaderLookId } from '@riverbankcms/theme-core/site-styles';
5
6
  import { type VisibleSiteStyleAccess } from './siteStyleAccess';
7
+ import type { PreviewDesignRow } from './sidebarTabPreference';
6
8
  export type StyleConfiguratorProps = Readonly<{
7
9
  siteId: string;
8
10
  apiClient: ApiClient;
9
11
  theme?: Theme | null;
10
12
  themeId?: string | null;
11
13
  selectionId?: string | null;
12
- /** Server-persisted Style configurator selections (Phase C). */
14
+ /** Server-persisted design selections. */
13
15
  initialSelections: Readonly<{
14
16
  buttonPersonalityId: ButtonPersonalityId | null;
15
17
  paletteVariantId: PaletteVariantId | null;
16
18
  paletteOverrides: PaletteOverrides | null;
19
+ headerLookId?: HeaderLookId | null;
20
+ footerLookId?: FooterLookId | null;
17
21
  }>;
22
+ headerSelectionContext?: Partial<HeaderSelectionContext>;
23
+ footerSelectionContext?: Partial<FooterSelectionContext>;
24
+ expandedRowRequest?: Readonly<{
25
+ /** Monotonic request id so repeated clicks on the same chrome surface retrigger the effect. */
26
+ id: number;
27
+ row: PreviewDesignRow;
28
+ }> | null;
18
29
  siteStyleAccess: VisibleSiteStyleAccess;
19
30
  }>;
20
- export declare function StyleConfigurator({ siteId, apiClient, theme, themeId, selectionId, initialSelections, siteStyleAccess, }: StyleConfiguratorProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare function StyleConfigurator({ siteId, apiClient, theme, themeId, selectionId, initialSelections, headerSelectionContext, footerSelectionContext, expandedRowRequest, siteStyleAccess, }: StyleConfiguratorProps): import("react/jsx-runtime").JSX.Element;
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import type { ButtonPersonalityId } from '@riverbankcms/theme-core/buttons';
14
14
  import type { PaletteOverrides, PaletteVariantId } from '@riverbankcms/theme-core/palette';
15
+ import type { FooterLookId, HeaderLookId } from '@riverbankcms/theme-core/site-styles';
15
16
  import type { SelectionFallbackWarning, SiteStyleId } from '@riverbankcms/theme-core/site-styles/previewCompiler';
16
17
  export type StyleConfiguratorSaveStatus = Readonly<{
17
18
  kind: 'idle';
@@ -23,7 +24,7 @@ export type StyleConfiguratorSaveStatus = Readonly<{
23
24
  kind: 'failed';
24
25
  message: string;
25
26
  }>;
26
- export type StyleConfiguratorExpandedRow = 'style' | 'buttons' | 'palette' | 'colours' | null;
27
+ export type StyleConfiguratorExpandedRow = 'style' | 'header' | 'footer' | 'buttons' | 'palette' | 'colours' | null;
27
28
  /**
28
29
  * Configurator-level notices that aren't compiler selection fallback warnings.
29
30
  * Kept separate from `SelectionFallbackWarning` (which comes from
@@ -37,6 +38,8 @@ export type StyleConfiguratorNotice = Readonly<{
37
38
  }>;
38
39
  export type SelectionSnapshot = Readonly<{
39
40
  siteStyleId: SiteStyleId;
41
+ headerLookId: HeaderLookId | null;
42
+ footerLookId: FooterLookId | null;
40
43
  buttonPersonalityId: ButtonPersonalityId;
41
44
  paletteVariantId: PaletteVariantId;
42
45
  paletteOverrides: PaletteOverrides | null;
@@ -60,6 +63,7 @@ export type StyleConfiguratorState = Readonly<{
60
63
  expandedRow: StyleConfiguratorExpandedRow;
61
64
  }>;
62
65
  export declare function createStyleConfiguratorState(base: SelectionSnapshot): StyleConfiguratorState;
66
+ export declare function openRow(state: StyleConfiguratorState, row: Exclude<StyleConfiguratorExpandedRow, null>): StyleConfiguratorState;
63
67
  /**
64
68
  * True iff the user has previewed a change that hasn't been applied yet.
65
69
  * Drives the "Apply" / "Cancel" footer visibility and the live-preview
@@ -68,6 +72,8 @@ export declare function createStyleConfiguratorState(base: SelectionSnapshot): S
68
72
  export declare function isPreviewingChange(state: StyleConfiguratorState): boolean;
69
73
  export declare function previewSiteStyle(state: StyleConfiguratorState, siteStyleId: SiteStyleId): StyleConfiguratorState;
70
74
  export declare function previewButtonPersonality(state: StyleConfiguratorState, buttonPersonalityId: ButtonPersonalityId): StyleConfiguratorState;
75
+ export declare function previewHeaderLook(state: StyleConfiguratorState, headerLookId: HeaderLookId | null): StyleConfiguratorState;
76
+ export declare function previewFooterLook(state: StyleConfiguratorState, footerLookId: FooterLookId | null): StyleConfiguratorState;
71
77
  export declare function previewPaletteVariant(state: StyleConfiguratorState, paletteVariantId: PaletteVariantId): StyleConfiguratorState;
72
78
  export declare function setPaletteOverrides(state: StyleConfiguratorState, paletteOverrides: PaletteOverrides | null): StyleConfiguratorState;
73
79
  /**
@@ -0,0 +1 @@
1
+ export declare const previewCustomizePillButtonClassName = "rounded-full bg-black/80 px-2.5 py-1 text-xs text-white shadow hover:bg-black";
@@ -41,4 +41,5 @@ export declare function previewCustomizeHistoryEntryFromAction(editorModel: Prev
41
41
  export declare function previewCustomizeUndoActionForEntry(entry: PreviewCustomizeHistoryEntry, editorModel: PreviewLoadedEditorModel): PreviewCustomizeAction;
42
42
  export declare function previewCustomizeRedoActionForEntry(entry: PreviewCustomizeHistoryEntry, editorModel: PreviewLoadedEditorModel): PreviewCustomizeAction;
43
43
  export declare function previewCustomizeHistoryPresentEquals(left: PreviewCustomizeHistoryPresent, right: PreviewCustomizeHistoryPresent): boolean;
44
+ export declare function contentRevisionIdForBlock(editorModel: PreviewLoadedEditorModel, blockId: PreviewCustomizeActionBlockId): string | null;
44
45
  export {};
@@ -1,4 +1,4 @@
1
- import { type PageDesignEditorReadModel } from '@riverbankcms/theme-core/site-styles/previewCompiler';
1
+ import type { PageDesignEditorReadModel } from '@riverbankcms/theme-core/site-styles/previewCompiler';
2
2
  import type { DesignBlockId } from '@riverbankcms/theme-core/site-styles';
3
3
  import type { PreviewCustomizeAction } from '../blocks/previewCustomizeActions';
4
4
  export type PreviewEditorRuntimeContent = Record<string, unknown>;
@@ -8,6 +8,14 @@ export type PreviewCustomizeRuntimePatch = Readonly<{
8
8
  nextContent: PreviewEditorRuntimeContent;
9
9
  rollback: (currentContent: PreviewEditorRuntimeContent) => PreviewEditorRuntimeContent;
10
10
  }>;
11
+ export type PreviewCustomizeActionDomain = Readonly<{
12
+ kind: 'block-content-write';
13
+ }> | Readonly<{
14
+ kind: 'page-design-write';
15
+ }> | Readonly<{
16
+ kind: 'render-only-preview';
17
+ }>;
18
+ export declare function classifyPreviewCustomizeActionDomain(action: PreviewCustomizeAction): PreviewCustomizeActionDomain;
11
19
  export declare function derivePreviewCustomizeRuntimePatch(input: Readonly<{
12
20
  action: PreviewCustomizeAction;
13
21
  editorModel: PageDesignEditorReadModel;
@@ -20,6 +20,9 @@ export type PreviewPageDesignEditorState = Readonly<{
20
20
  export type PreviewPageDesignEditorApplyOutcome = Readonly<{
21
21
  kind: 'saved';
22
22
  response: ApplyPageDesignEditorActionResponse;
23
+ }> | Readonly<{
24
+ kind: 'queued';
25
+ message: string;
23
26
  }> | Readonly<{
24
27
  kind: 'skipped';
25
28
  reason: PreviewCustomizeSkipReason;
@@ -37,10 +40,14 @@ export type PreviewPageDesignEditorApplyOutcome = Readonly<{
37
40
  export type PreviewCustomizeSkipReason = 'disabled' | 'missing-page' | 'not-loaded' | 'mutation-pending' | 'stale' | 'no-history-entry' | 'cannot-undo' | 'cannot-redo';
38
41
  export type PreviewCustomizeMutationState = Readonly<{
39
42
  kind: 'idle';
43
+ }> | Readonly<{
44
+ kind: 'dirty';
45
+ actions: readonly PreviewCustomizePendingAction[];
40
46
  }> | Readonly<{
41
47
  kind: 'applying';
42
48
  action: PreviewCustomizeAction;
43
49
  historyEntry: PreviewCustomizeHistoryEntry | null;
50
+ queuedActions: readonly PreviewCustomizePendingAction[];
44
51
  }> | Readonly<{
45
52
  kind: 'undoing';
46
53
  action: PreviewCustomizeAction;
@@ -72,6 +79,10 @@ export type PreviewCustomizeWorkflowState = Readonly<{
72
79
  history: PreviewCustomizeHistoryState;
73
80
  mutation: PreviewCustomizeMutationState;
74
81
  }>;
82
+ type PreviewCustomizePendingAction = Readonly<{
83
+ action: PreviewCustomizeAction;
84
+ historyEntry: PreviewCustomizeHistoryEntry | null;
85
+ }>;
75
86
  export type PreviewCustomizeBeginResult = Readonly<{
76
87
  kind: 'started';
77
88
  state: PreviewCustomizeWorkflowState;
@@ -87,6 +98,7 @@ export declare function failedPreviewCustomizeWorkflowState(message: string): Pr
87
98
  export declare function previewCustomizeLoadSucceeded(pageState: ApiPageDesignEditorStateResponse): PreviewCustomizeWorkflowState;
88
99
  export declare function previewCustomizeWorkflowPageState(workflow: PreviewCustomizeWorkflowState): PreviewPageDesignEditorState;
89
100
  export declare function beginPreviewCustomizeApply(workflow: PreviewCustomizeWorkflowState, action: PreviewCustomizeAction): PreviewCustomizeBeginResult;
101
+ export declare function beginPreviewCustomizeAutosave(workflow: PreviewCustomizeWorkflowState): PreviewCustomizeBeginResult;
90
102
  export declare function beginPreviewCustomizeUndo(workflow: PreviewCustomizeWorkflowState): PreviewCustomizeBeginResult;
91
103
  export declare function beginPreviewCustomizeRedo(workflow: PreviewCustomizeWorkflowState): PreviewCustomizeBeginResult;
92
104
  export declare function confirmPreviewCustomizeMutation(workflow: PreviewCustomizeWorkflowState, response: ApplyPageDesignEditorActionResponse): PreviewCustomizeWorkflowState;
@@ -103,4 +115,5 @@ export declare function applyPreviewCustomizeActionToState(state: PreviewPageDes
103
115
  export declare function skippedPreviewCustomizeOutcome(reason: PreviewCustomizeSkipReason): Extract<PreviewPageDesignEditorApplyOutcome, {
104
116
  kind: 'skipped';
105
117
  }>;
118
+ export declare function previewCustomizePendingActions(workflow: PreviewCustomizeWorkflowState): readonly PreviewCustomizeAction[];
106
119
  export {};
@@ -1,6 +1,12 @@
1
1
  import type { PreviewSidebarTab } from '@riverbankcms/content-editor';
2
2
  export type { PreviewSidebarTab };
3
+ export type PreviewDesignRow = 'header' | 'footer';
4
+ export type PreviewSidebarOpenRequest = Readonly<{
5
+ tab: PreviewSidebarTab;
6
+ designRow?: PreviewDesignRow;
7
+ }>;
8
+ export declare function parsePreviewSidebarOpenRequestDetail(detail: unknown): PreviewSidebarOpenRequest;
3
9
  export declare function getPreviewSidebarTab(): PreviewSidebarTab;
4
10
  export declare function setPreviewSidebarTab(tab: PreviewSidebarTab): void;
5
- export declare function requestPreviewSidebarOpen(tab: PreviewSidebarTab): void;
6
- export declare function onPreviewSidebarOpenRequest(handler: (tab: PreviewSidebarTab) => void): () => void;
11
+ export declare function requestPreviewSidebarOpen(input: PreviewSidebarTab | PreviewSidebarOpenRequest): void;
12
+ export declare function onPreviewSidebarOpenRequest(handler: (request: PreviewSidebarOpenRequest) => void): () => void;
@@ -0,0 +1,49 @@
1
+ import { type CuratedSiteStyle } from '@riverbankcms/theme-core/site-styles/previewCompiler';
2
+ import { type FooterLookId, type FooterSelectionContext, type HeaderLookId, type HeaderSelectionContext, type LookCustomizationWritePlan } from '@riverbankcms/theme-core/site-styles';
3
+ import type { SelectionSnapshot, StyleConfiguratorState } from './StyleConfigurator.state';
4
+ export type SiteChromeLookOption<TId extends string | null> = Readonly<{
5
+ id: TId;
6
+ label: string;
7
+ description?: string;
8
+ available: boolean;
9
+ }>;
10
+ export type SiteChromeLookCatalogOption<TId extends string> = Readonly<{
11
+ id: TId;
12
+ label: string;
13
+ }>;
14
+ export type SiteChromeLookRowModel<TId extends string> = Readonly<{
15
+ options: readonly SiteChromeLookOption<TId | null>[];
16
+ diagnostics: readonly string[];
17
+ renderedLookId: TId;
18
+ }>;
19
+ export type SiteChromeLookModels = Readonly<{
20
+ header: SiteChromeLookRowModel<HeaderLookId>;
21
+ footer: SiteChromeLookRowModel<FooterLookId>;
22
+ }>;
23
+ type SiteChromeLookModelInput = Readonly<{
24
+ state: StyleConfiguratorState;
25
+ siteStyle: CuratedSiteStyle;
26
+ headerSelectionContext?: Partial<HeaderSelectionContext>;
27
+ footerSelectionContext?: Partial<FooterSelectionContext>;
28
+ }>;
29
+ export declare function buildSiteChromeLookModels(input: SiteChromeLookModelInput): SiteChromeLookModels;
30
+ export declare function cycleSiteChromeLookId<TId extends string>(options: readonly SiteChromeLookOption<TId | null>[], currentId: TId | null, direction: 'prev' | 'next'): TId | null | undefined;
31
+ export declare function cycleableSiteChromeOptions<TId extends string>(options: readonly SiteChromeLookOption<TId | null>[]): readonly SiteChromeLookOption<TId | null>[];
32
+ export type SiteChromeLookSelectionCommand = Readonly<{
33
+ surface: 'header';
34
+ lookId: HeaderLookId | null;
35
+ }> | Readonly<{
36
+ surface: 'footer';
37
+ lookId: FooterLookId | null;
38
+ }>;
39
+ export type SiteChromeLookSelectionPlan = Readonly<{
40
+ kind: 'header';
41
+ writePlan: LookCustomizationWritePlan<HeaderLookId>;
42
+ next: Pick<SelectionSnapshot, 'headerLookId'>;
43
+ }> | Readonly<{
44
+ kind: 'footer';
45
+ writePlan: LookCustomizationWritePlan<FooterLookId>;
46
+ next: Pick<SelectionSnapshot, 'footerLookId'>;
47
+ }>;
48
+ export declare function planSiteChromeLookSelection(command: SiteChromeLookSelectionCommand): SiteChromeLookSelectionPlan;
49
+ export {};
@@ -284,13 +284,15 @@ export type SiteResponse = {
284
284
  themeId?: string | null;
285
285
  selectionId?: string | null;
286
286
  /**
287
- * Persisted Style configurator selections (Phase C). Optional so legacy
287
+ * Persisted design selections. Optional so legacy
288
288
  * payloads without these columns still satisfy the type — consumers fall
289
289
  * back to the site style's defaults when null.
290
290
  */
291
291
  selectionButtonPersonalityId?: string | null;
292
292
  selectionPaletteVariantId?: string | null;
293
293
  selectionPaletteOverrides?: Record<string, string> | null;
294
+ selectionHeaderLookId?: string | null;
295
+ selectionFooterLookId?: string | null;
294
296
  navigation: NavigationMenuWithItems[];
295
297
  appointmentsEnabled?: boolean;
296
298
  portalEnabled?: boolean;
@@ -8,4 +8,4 @@
8
8
  * 1. This constant
9
9
  * 2. The "version" field in package.json
10
10
  */
11
- export declare const SDK_VERSION = "0.62.2";
11
+ export declare const SDK_VERSION = "0.62.4";
@@ -34,6 +34,7 @@ export type SurfaceHostContext = Readonly<{
34
34
  * rather than relying on positional alignment between arrays.
35
35
  */
36
36
  export declare const SURFACE_ROOT_HOSTS: Readonly<Record<SurfaceId, Readonly<Record<SurfaceTier, string>>>>;
37
+ export declare const SURFACE_SITE_ROOT_HOSTS: Readonly<Record<SurfaceId, Readonly<Record<SurfaceTier, string>>>>;
37
38
  export declare function resolveSurfaceFontHref(surfaceId: SurfaceId): string | null;
38
39
  export declare function resolveSurfaceHostContext(value: string | URL | null | undefined): SurfaceHostContext | null;
39
40
  export declare function buildSurfaceAwareDashboardOrigin(input: Readonly<{