@riverbankcms/sdk 0.140.0 → 0.142.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 (145) hide show
  1. package/dist/{PreviewEditorSidebar-CUyTzd5z.mjs → PreviewEditorSidebar-Dk6Dt11f.mjs} +24 -15
  2. package/dist/{PreviewEditorUI-Agkw4v5i.mjs → PreviewEditorUI-D6EQTsCA.mjs} +3 -3
  3. package/dist/{PreviewQueryProvider-CN0ewic5.mjs → PreviewQueryProvider-CC-EPkyQ.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-DdbeAdS8.mjs → SdkPreviewModeRuntime-DH1n4ytY.mjs} +85 -54
  5. package/dist/{SiteChromeCustomizeContext-CqGOz-Kv.mjs → SiteChromeCustomizeContext-DunIzY0K.mjs} +797 -216
  6. package/dist/_dts/api/src/billing.d.ts +6 -1
  7. package/dist/_dts/api/src/bookingConfig.d.ts +1 -1
  8. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +2 -2
  9. package/dist/_dts/api/src/contentRuntime.d.ts +12 -31
  10. package/dist/_dts/api/src/domainConnection.d.ts +4 -0
  11. package/dist/_dts/api/src/endpoints.d.ts +0 -27
  12. package/dist/_dts/api/src/footerCompositionContracts.d.ts +25 -0
  13. package/dist/_dts/api/src/index.d.ts +2 -2
  14. package/dist/_dts/api/src/launchReadiness.d.ts +1 -0
  15. package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +2 -1
  16. package/dist/_dts/api/src/publicBookingService.d.ts +1 -0
  17. package/dist/_dts/api/src/sdkConfig/layout.d.ts +13 -0
  18. package/dist/_dts/api/src/sdkContracts.d.ts +3 -8
  19. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -26
  20. package/dist/_dts/api/src/siteOnboarding.d.ts +7 -0
  21. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -31
  22. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +6 -1
  23. package/dist/_dts/billing/src/site-arrangements.d.ts +18 -5
  24. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -0
  25. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -0
  26. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +2 -0
  27. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +122 -0
  28. package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +2 -1
  29. package/dist/_dts/blocks/src/system/blocks/events/shared/eventSelection.d.ts +11 -0
  30. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +56 -0
  31. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +8 -0
  32. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  33. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -47
  34. package/dist/_dts/blocks/src/system/data/prefetchBlockData.d.ts +5 -0
  35. package/dist/_dts/blocks/src/system/data/utils.d.ts +1 -1
  36. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +27 -1
  37. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +12 -180
  38. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +6 -90
  39. package/dist/_dts/blocks/src/system/runtime/hooks/useEventFilters.d.ts +2 -1
  40. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +5 -1
  41. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +4 -0
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.state.d.ts +5 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.d.ts +3 -0
  44. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.state.d.ts +10 -3
  45. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventCheckoutHandoffRestore.d.ts +9 -0
  46. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -5
  47. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useSettledCommerceView.d.ts +37 -0
  48. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +4 -3
  49. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +3 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +11 -101
  51. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +63 -2
  52. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listOptions.d.ts +2 -0
  53. package/dist/_dts/blocks/src/system/transforms/registry/eventCalendar.d.ts +12 -0
  54. package/dist/_dts/commerce/src/purchase/bookingInstalmentSchedule.d.ts +4 -0
  55. package/dist/_dts/commerce/src/purchase/stripeCommissionMetadata.d.ts +1 -2
  56. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +3102 -3122
  57. package/dist/_dts/editor-blocks/src/block-editor/ColourFieldOptionsProvider.d.ts +7 -0
  58. package/dist/_dts/editor-blocks/src/block-editor/colourFieldVisibility.d.ts +7 -0
  59. package/dist/_dts/editor-blocks/src/block-editor/preparedManifest.d.ts +2 -0
  60. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  61. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +27 -1
  62. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -2
  63. package/dist/_dts/preview-next/src/client/preview/PreviewFooterEditorPanel.d.ts +3 -6
  64. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -2
  65. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -2
  66. package/dist/_dts/preview-next/src/client/preview/footerInspection.d.ts +16 -0
  67. package/dist/_dts/preview-next/src/client/preview/sdkConfig.d.ts +6 -0
  68. package/dist/_dts/sdk/src/config/types.d.ts +2 -18
  69. package/dist/_dts/sdk/src/config/validation.d.ts +6 -0
  70. package/dist/_dts/sdk/src/public-api/contracts.d.ts +4 -1
  71. package/dist/_dts/sdk/src/version.d.ts +1 -1
  72. package/dist/_dts/theme-core/src/ThemeFontLoader.d.ts +17 -1
  73. package/dist/_dts/theme-core/src/buttons/affordanceSuppression.d.ts +17 -0
  74. package/dist/_dts/theme-core/src/buttons/buttonColourContract.d.ts +1 -1
  75. package/dist/_dts/theme-core/src/buttons/classNames.d.ts +16 -0
  76. package/dist/_dts/theme-core/src/buttons/generateButtonCss.d.ts +0 -6
  77. package/dist/_dts/theme-core/src/buttons/resolvedButtonCss.d.ts +4 -4
  78. package/dist/_dts/theme-core/src/footer/mode.d.ts +10 -1
  79. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  80. package/dist/_dts/theme-core/src/hosted-booking-appearance.d.ts +54 -12
  81. package/dist/_dts/theme-core/src/index.d.ts +1 -1
  82. package/dist/_dts/theme-core/src/schema.d.ts +1 -7
  83. package/dist/_dts/theme-core/src/site-styles/effectivePageDesign.d.ts +32 -0
  84. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  85. package/dist/client/{BookingConsentAgreement-CuKa82V4.mjs → BookingConsentAgreement-CnJeq3_r.mjs} +2 -2
  86. package/dist/client/{DiscountCodeDisclosure-BbYieKWB.mjs → DiscountCodeDisclosure-BINEO6J9.mjs} +1 -1
  87. package/dist/client/{EventCombined.client-LTfR1Aby.mjs → EventCombined.client-srxNQ6sZ.mjs} +11 -15
  88. package/dist/client/{EventListing.client-DUHpYSuo.mjs → EventListing.client-DbyVyGkX.mjs} +4 -17
  89. package/dist/client/{LeafletStaticMap-CHRupL6m.mjs → LeafletStaticMap-B-wpijzL.mjs} +1 -1
  90. package/dist/client/{accordion-6HiIFxNL.mjs → accordion-B-iUXU7n.mjs} +1 -1
  91. package/dist/client/{bookingForm-Dlmid43H.mjs → bookingForm-BXYPke5q.mjs} +5 -5
  92. package/dist/client/bookings.mjs +194 -102
  93. package/dist/client/{carousel-DmkZRRq_.mjs → carousel-Cr4aj63H.mjs} +1 -1
  94. package/dist/client/{cart-CIC24330.mjs → cart-DibP9WWa.mjs} +3 -3
  95. package/dist/client/{checkout-D1Zw9imo.mjs → checkout-CrSBVnL8.mjs} +3 -3
  96. package/dist/client/client.mjs +643 -192
  97. package/dist/client/{context-Cy1OayHx.mjs → context-Ces-AgdR.mjs} +1 -1
  98. package/dist/client/{dates-aDcfoLHr.mjs → dates-BXyNeNhB.mjs} +2 -2
  99. package/dist/client/{eventCalendar-FQxMPAjf.mjs → eventCalendar-HwpPeqrH.mjs} +11 -7
  100. package/dist/client/{eventCombined-Dr3ac6Hb.mjs → eventCombined-BpFUkuEI.mjs} +3 -3
  101. package/dist/client/{eventDetails-D-AzUHFQ.mjs → eventDetails-DK_agiWy.mjs} +4 -4
  102. package/dist/client/{eventListing-B3XxBf3i.mjs → eventListing-DhzHqP1c.mjs} +3 -3
  103. package/dist/client/{eventRegistration-I6EaokFD.mjs → eventRegistration-BdQ_Dn2d.mjs} +124 -32
  104. package/dist/client/{form-BbWckVWY.mjs → form-B1frcuzy.mjs} +2 -2
  105. package/dist/client/{headerSection-C9qU4Y7x.mjs → headerSection-CT5z460s.mjs} +2 -2
  106. package/dist/client/hooks.mjs +274 -45
  107. package/dist/client/{locationMap-CLCShvlG.mjs → locationMap-CIQXB9i2.mjs} +2 -2
  108. package/dist/client/{newsletterForm-Briukxzi.mjs → newsletterForm-BYNYZSes.mjs} +23 -10
  109. package/dist/client/{pricing-Copadu-2.mjs → pricing-CbTlAsmt.mjs} +1 -1
  110. package/dist/client/{productDetail-oujlRd-r.mjs → productDetail-CR7Z3yjS.mjs} +3 -3
  111. package/dist/client/{productList-BRiIRUcd.mjs → productList-DXj00vzR.mjs} +3 -3
  112. package/dist/client/{propsDecoder-CB2KS_ko.mjs → propsDecoder-DiLiBdek.mjs} +57 -16
  113. package/dist/client/rendering/client.mjs +476 -132
  114. package/dist/client/rendering/islands.mjs +17 -17
  115. package/dist/client/rendering.mjs +686 -195
  116. package/dist/client/{scrollToBlock-B1IS1_ua.mjs → scrollToBlock-CrcbBf0h.mjs} +28 -11
  117. package/dist/client/{shop-Vn6yNFED.mjs → shop-DgqiB_1b.mjs} +6 -6
  118. package/dist/client/{shop-commerce-BVTqipYp.mjs → shop-commerce-D_J781in.mjs} +5 -5
  119. package/dist/client/{shop-commerce-store-BVnJVy7v.mjs → shop-commerce-store-PGUbDwqe.mjs} +1 -1
  120. package/dist/client/{shopShared-COIeK77T.mjs → shopShared-C_Bb2zwG.mjs} +3 -3
  121. package/dist/client/{useEventFilters-DzIUcS9n.mjs → useEventFilters-CM17Xpr1.mjs} +17 -11
  122. package/dist/preview-next/before-render.mjs +0 -37
  123. package/dist/preview-next/client/runtime.mjs +4 -4
  124. package/dist/preview-next/editor-chrome.css +4 -8
  125. package/dist/preview-next/keepAlive.mjs +0 -37
  126. package/dist/preview-next/middleware.mjs +0 -37
  127. package/dist/{previewAuthStore-Gjb6r6vz.mjs → previewAuthStore-oVttoRDO.mjs} +0 -37
  128. package/dist/{sdk-runtime-CnCLvZRv.mjs → sdk-runtime-DhmuRhIX.mjs} +2 -2
  129. package/dist/{separator-DKDRJ1oH.mjs → separator-C3hlg9LH.mjs} +1 -1
  130. package/dist/server/components.mjs +452 -111
  131. package/dist/server/config-validation.mjs +263 -40
  132. package/dist/server/config.mjs +263 -40
  133. package/dist/server/data.mjs +274 -45
  134. package/dist/server/index.mjs +1 -38
  135. package/dist/server/next.mjs +427 -119
  136. package/dist/server/page-converter.mjs +208 -33
  137. package/dist/server/prebuild.mjs +1 -1
  138. package/dist/server/rendering/server.mjs +467 -119
  139. package/dist/server/rendering.mjs +467 -117
  140. package/dist/server/routing.mjs +301 -50
  141. package/dist/server/server.mjs +275 -83
  142. package/dist/server/theme-bridge.mjs +57 -23
  143. package/dist/server/theme.mjs +11 -9
  144. package/dist/styles/index.css +28 -2
  145. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { ColourFieldOptions } from './colourFieldVisibility';
3
+ /** Dashboard forms opt in; preview's visual editing controls retain their own policy. */
4
+ export declare function ColourFieldOptionsProvider({ children }: {
5
+ children: ReactNode;
6
+ }): import("react").JSX.Element;
7
+ export declare function useColourFieldOptions(): ColourFieldOptions | undefined;
@@ -0,0 +1,7 @@
1
+ import type { BlockManifest } from '../../../blocks/src/index';
2
+ export type ColourFieldOptions = Readonly<{
3
+ colour: boolean;
4
+ gradient: boolean;
5
+ }>;
6
+ /** Only changes form presentation; the validation manifest and saved data stay intact. */
7
+ export declare function hideUnavailableColourFields(manifest: BlockManifest, options: ColourFieldOptions): BlockManifest;
@@ -1,3 +1,4 @@
1
+ import { type ColourFieldOptions } from './colourFieldVisibility';
1
2
  import type { BlockManifest, StyleGroups } from '../../../blocks/src/index';
2
3
  import type { SdkBlockFieldExtensionsMap, SdkBlockFieldOptionsMap } from '../../../block-form/src/index';
3
4
  export type BlockEditorManifestVisibilityPolicy = Readonly<{
@@ -18,5 +19,6 @@ export declare function prepareBlockEditorManifest(input: Readonly<{
18
19
  blockFieldOptions?: SdkBlockFieldOptionsMap | null;
19
20
  blockFieldExtensions?: SdkBlockFieldExtensionsMap | null;
20
21
  visibilityPolicy: BlockEditorManifestVisibilityPolicy;
22
+ colourFieldOptions?: ColourFieldOptions;
21
23
  allowedPromotedFieldPaths?: readonly string[];
22
24
  }>): PreparedBlockEditorManifest;
@@ -25,3 +25,4 @@ export { stripTopLevelRoutingUi } from './block-editor/settingsIntent';
25
25
  export * from './widgets/index';
26
26
  export { createBlockFormLogger, setBlockFormLoggerFactory, setBlockFormAppLogger, } from './block-form/debug';
27
27
  export type { BlockFormLogger } from './block-form/debug';
28
+ export { ColourFieldOptionsProvider } from './block-editor/ColourFieldOptionsProvider';
@@ -12,6 +12,12 @@ export type SiteOptionLoadItems = (args: SiteOptionLoadItemsArgs) => Promise<Sit
12
12
  export type SiteOptionLoadErrorMapper = (error: unknown, args: SiteOptionLoadItemsArgs) => unknown;
13
13
  export type SiteOptionManageLinkRenderers = Partial<Readonly<Record<SiteOptionSource, SiteOptionWidgetAdapter['renderManageLink']>>>;
14
14
  export declare const siteOptionWidgetLabels: {
15
+ readonly eventSeries: {
16
+ readonly loading: "Loading events...";
17
+ readonly select: "Choose events";
18
+ readonly empty: "No events available. Create an event in Bookings first.";
19
+ readonly emptySelection: "Choose at least one event to show in this block.";
20
+ };
15
21
  readonly eventCategories: {
16
22
  readonly loading: "Loading categories...";
17
23
  readonly select: "Select categories";
@@ -32,14 +38,34 @@ export declare const siteOptionWidgetLabels: {
32
38
  };
33
39
  };
34
40
  export declare const siteOptionLoadFailureMessages: {
41
+ readonly eventSeries: "We couldn't load your events. Please try again.";
35
42
  readonly eventCategories: "Failed to load event categories";
36
43
  readonly venues: "Failed to load venues";
37
44
  readonly staffMembers: "Failed to load staff members";
38
45
  };
39
46
  export declare function mapEventCategoriesToSiteOptionItems(payload: ListEventCategoriesResponse): SiteOptionWidgetItem[];
47
+ export declare function mapEventsToSiteOptionItems(events: readonly Readonly<{
48
+ title: string;
49
+ slug: string;
50
+ schedules: {
51
+ kind: 'ordinary';
52
+ schedule: {
53
+ id: string;
54
+ };
55
+ } | {
56
+ kind: 'wholeSeries';
57
+ runs: readonly {
58
+ id: string;
59
+ title: string;
60
+ slug: string;
61
+ status?: string;
62
+ visibility?: string;
63
+ }[];
64
+ };
65
+ }>[]): SiteOptionWidgetItem[];
40
66
  export declare function mapVenuesToSiteOptionItems(payload: ListVenuesResponse): SiteOptionWidgetItem[];
41
67
  export declare function mapStaffMembersToSiteOptionItems(payload: ListAppointmentResourcesResponse): SiteOptionWidgetItem[];
42
- export declare function loadSiteOptionItemsFromApi({ apiClient, siteId, source, }: SiteOptionLoadItemsArgs & Readonly<{
68
+ export declare function loadSiteOptionItemsFromApi({ apiClient, siteId, source }: SiteOptionLoadItemsArgs & Readonly<{
43
69
  apiClient: ApiClient;
44
70
  }>): Promise<SiteOptionWidgetItem[]>;
45
71
  export declare function createSiteOptionApiLoader(apiClient: ApiClient): SiteOptionLoadItems;
@@ -1,6 +1,6 @@
1
1
  import React, { type ReactNode } from 'react';
2
2
  import type { ApiClient } from '../../../../api/src/request';
3
- import type { SdkConfigForBlockPicker } from '../../../../editor-blocks/src/index';
3
+ import type { SdkConfigForPreview } from './sdkConfig';
4
4
  import type { SurfaceId } from '../../../../surfaces/src/index';
5
5
  import type { EntrySubrouteContextData, BookingOfferingPresetSummary, Theme } from '../../../../blocks/src/index';
6
6
  import { type ContentTypeSchema } from '../../../../content-model/src/index';
@@ -44,7 +44,7 @@ export type PreviewEditorSidebarProps = {
44
44
  bearerToken?: string | null;
45
45
  entrySubrouteContext?: EntrySubrouteContextData | null;
46
46
  assistantPanel?: ReactNode;
47
- sdkConfig?: SdkConfigForBlockPicker | null;
47
+ sdkConfig?: SdkConfigForPreview | null;
48
48
  bookingOfferingPresets?: readonly BookingOfferingPresetSummary[] | null;
49
49
  siteStyleAccess?: SiteStyleAccess;
50
50
  activeTab: PreviewEditorSidebarTab;
@@ -1,11 +1,9 @@
1
+ import { type FooterInspection } from './footerInspection';
1
2
  import type { ApiClient } from '../../../../api/src/request';
2
3
  import type { Theme } from '../../../../blocks/src/index';
3
- import { type PreviewInspection } from '../../../../content-editor/src/index';
4
4
  import type { SiteStyleAccess } from './siteStyleAccess';
5
- type FooterInspection = Extract<PreviewInspection, Readonly<{
6
- kind: 'footer' | 'footer-module';
7
- }>>;
8
- export declare function PreviewFooterEditorPanel({ apiClient, siteId, dashboardBaseUrl, theme, selectionId, selectionVersion, siteStyleAccess, inspection, canEdit, onSaved, }: Readonly<{
5
+ export declare function PreviewFooterEditorPanel({ sdkConfig, apiClient, siteId, dashboardBaseUrl, theme, selectionId, selectionVersion, siteStyleAccess, inspection, canEdit, onSaved, }: Readonly<{
6
+ sdkConfig?: unknown;
9
7
  apiClient: ApiClient;
10
8
  siteId: string;
11
9
  dashboardBaseUrl: string | null;
@@ -17,4 +15,3 @@ export declare function PreviewFooterEditorPanel({ apiClient, siteId, dashboardB
17
15
  canEdit: boolean;
18
16
  onSaved?: () => void;
19
17
  }>): import("react").JSX.Element;
20
- export {};
@@ -4,7 +4,7 @@ import type { ButtonStyleSelection, ButtonStyleSelectionRepair } from '../../../
4
4
  import type { FooterLookId, HeaderLayoutStyleSelection, HeaderLogoContext } from '../../../../theme-core/src/site-styles/index';
5
5
  import type { EntrySubrouteContextData, BookingOfferingPresetSummary, MediaAssetIndexItem, Theme } from '../../../../blocks/src/index';
6
6
  import type { ContentTypeSchema } from '../../../../content-model/src/index';
7
- import type { SdkConfigForBlockPicker } from '../../../../editor-blocks/src/index';
7
+ import type { SdkConfigForPreview } from './sdkConfig';
8
8
  import type { SurfaceId } from '../../../../surfaces/src/index';
9
9
  import { type PreviewBlock, type PreviewContentEntryData, type PreviewPageMetadata } from './PreviewEntryControllerProvider';
10
10
  import { type PreviewRenderingMode, type PreviewThemeRuntime } from './themeRuntime';
@@ -70,7 +70,7 @@ type PreviewShellCommonProps = {
70
70
  maintenanceModeEnabled: boolean;
71
71
  entrySubrouteContext?: EntrySubrouteContextData | null;
72
72
  assistantPanel?: PreviewEditorSidebarProps['assistantPanel'];
73
- sdkConfig?: SdkConfigForBlockPicker | null;
73
+ sdkConfig?: SdkConfigForPreview | null;
74
74
  mediaAssets?: readonly MediaAssetIndexItem[];
75
75
  bookingOfferingPresets?: readonly BookingOfferingPresetSummary[] | null;
76
76
  supabaseUrl?: string;
@@ -4,7 +4,7 @@ import type { ButtonStyleSelection, ButtonStyleSelectionRepair } from '../../../
4
4
  import type { HeaderLogoContext, FooterLookId, HeaderLayoutStyleSelection } from '../../../../theme-core/src/site-styles/index';
5
5
  import type { ContentTypeSchema } from '../../../../content-model/src/index';
6
6
  import type { ApiClient } from '../../../../api/src/request';
7
- import type { SdkConfigForBlockPicker } from '../../../../editor-blocks/src/index';
7
+ import type { SdkConfigForPreview } from './sdkConfig';
8
8
  import type { SurfaceId } from '../../../../surfaces/src/index';
9
9
  import { type PreviewEntryData, type PreviewTemplateData } from './PreviewEditorSidebar';
10
10
  import { type SiteStyleAccess } from './siteStyleAccess';
@@ -36,7 +36,7 @@ type PreviewShellLayoutCommonProps = {
36
36
  maintenanceModeEnabled: boolean;
37
37
  entrySubrouteContext?: EntrySubrouteContextData | null;
38
38
  assistantPanel?: ReactNode;
39
- sdkConfig?: SdkConfigForBlockPicker | null;
39
+ sdkConfig?: SdkConfigForPreview | null;
40
40
  bookingOfferingPresets?: readonly BookingOfferingPresetSummary[] | null;
41
41
  siteStyleAccess?: SiteStyleAccess;
42
42
  onFooterSaved?: () => void;
@@ -0,0 +1,16 @@
1
+ import type { PreviewInspection } from '../../../../content-editor/src/index';
2
+ export type FooterInspection = Extract<PreviewInspection, {
3
+ kind: 'footer' | 'footer-module';
4
+ }>;
5
+ /** Shared by sidebar routing and the footer panel's initial editing target. */
6
+ export declare function resolveFooterInspection(inspection: PreviewInspection | null): FooterInspection | null;
7
+ export declare function footerComposerInspectionProps(inspection: FooterInspection | null): {
8
+ initialTarget: {
9
+ kind: "module";
10
+ moduleId: import("../../../../core/src/index").FooterModuleId;
11
+ } | {
12
+ kind: "overview";
13
+ moduleId?: undefined;
14
+ };
15
+ initialTargetRequestId: number | undefined;
16
+ };
@@ -0,0 +1,6 @@
1
+ import type { SdkSiteLayoutConfig } from '../../../../api/src/index';
2
+ import type { SdkConfigForBlockPicker } from '../../../../editor-blocks/src/index';
3
+ /** SDK config fields consumed by preview editing, beyond the block picker. */
4
+ export type SdkConfigForPreview = SdkConfigForBlockPicker & {
5
+ layout?: Pick<SdkSiteLayoutConfig, 'footerMode'>;
6
+ };
@@ -4,6 +4,7 @@
4
4
  * These types define the schema for SDK site configuration that can be
5
5
  * declared in code and consumed by tooling.
6
6
  */
7
+ import type { SdkSiteLayoutConfig } from '../../../api/src/index';
7
8
  import type { ContentConfig } from './content-types';
8
9
  import type { FieldDefinition } from './field-definitions';
9
10
  import type { NodeDefinition } from '../contracts';
@@ -383,24 +384,7 @@ export interface RiverbankSiteConfig {
383
384
  * These blocks are SDK-managed (source controlled) and synced to the CMS via
384
385
  * `riverbankcms push-config`.
385
386
  */
386
- layout?: {
387
- /**
388
- * Global footer blocks list (applies to all pages).
389
- *
390
- * These are block instances, not persisted CMS page blocks.
391
- */
392
- footerBlocks?: Array<{
393
- /**
394
- * Optional stable identifier for list rendering.
395
- * Not a CMS block UUID.
396
- */
397
- id?: string;
398
- /** Block kind (system: block.* or custom: custom.*) */
399
- kind: string;
400
- /** Static content payload for the block */
401
- content?: Record<string, unknown>;
402
- }>;
403
- };
387
+ layout?: SdkSiteLayoutConfig;
404
388
  /**
405
389
  * Custom blocks defined by the SDK site.
406
390
  * These blocks appear in the block picker and are edited via CMS forms.
@@ -456,6 +456,12 @@ export declare const themeSourceSchema: z.ZodOptional<z.ZodEnum<{
456
456
  */
457
457
  export declare const activeThemeSchema: z.ZodOptional<z.ZodString>;
458
458
  export declare const layoutConfigSchema: z.ZodObject<{
459
+ footerMode: z.ZodOptional<z.ZodEnum<{
460
+ none: "none";
461
+ default: "default";
462
+ blocks: "blocks";
463
+ "default+blocks": "default+blocks";
464
+ }>>;
459
465
  footerBlocks: z.ZodOptional<z.ZodArray<z.ZodObject<{
460
466
  id: z.ZodOptional<z.ZodString>;
461
467
  kind: z.ZodString;
@@ -8,6 +8,9 @@ import type { PublicTeamMemberBlockItem } from './teamMemberContracts';
8
8
  import type { ResolveEventSubrouteResponse } from './eventSubrouteContracts';
9
9
  export type { PublicTeamMemberBlockItem, PublicTeamMemberPhoto, PublicTeamMemberSummary, } from './teamMemberContracts';
10
10
  export type RuntimeSiteSdkConfig = {
11
+ layout?: {
12
+ footerMode?: import('../../../theme-core/src/footer/mode').FooterMode;
13
+ };
11
14
  theme?: SdkThemeConfig;
12
15
  customBlocks?: SdkCustomBlock[];
13
16
  };
@@ -286,7 +289,7 @@ export type SiteRouteRecord = {
286
289
  publishedAt?: string | null;
287
290
  };
288
291
  export type SiteBookingOfferingPresetSummary = ApiSiteBookingOfferingPresetSummary;
289
- type SiteSelectionResponse = Pick<ApiSiteBySlugResponse, 'theme' | 'themeId' | 'bookingAttribution' | Extract<keyof ApiSiteBySlugResponse, `selection${string}`>>;
292
+ type SiteSelectionResponse = Pick<ApiSiteBySlugResponse, 'theme' | 'hostedBookingAppearance' | 'themeId' | 'bookingAttribution' | Extract<keyof ApiSiteBySlugResponse, `selection${string}`>>;
290
293
  export type SiteResponse = SiteSelectionResponse & {
291
294
  site: ApiSiteBySlugResponse['site'] & {
292
295
  id: string;
@@ -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.140.0";
11
+ export declare const SDK_VERSION = "0.142.0";
@@ -1,8 +1,24 @@
1
1
  import * as React from "react";
2
2
  import type { Theme, Typography } from "./schema";
3
3
  import type { SiteFont } from "./fonts/types";
4
+ /**
5
+ * Collect unique font families from typography config
6
+ */
7
+ type FontLoadingStyle = Readonly<{
8
+ family: string;
9
+ weight?: Typography['body']['weight'] | number;
10
+ }>;
11
+ type FontLoadingWeight = Readonly<{
12
+ weight?: Typography['body']['weight'] | number | null;
13
+ }>;
14
+ type FontLoadingTypography = Readonly<{
15
+ body: FontLoadingStyle;
16
+ headings: Readonly<{
17
+ default: FontLoadingStyle;
18
+ }> & Partial<Record<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6', FontLoadingWeight>>;
19
+ }>;
4
20
  type ThemeFontLoaderProps = {
5
- typography: Typography;
21
+ typography: FontLoadingTypography;
6
22
  /** Optional button font weight from theme.buttons.global.fontWeight */
7
23
  buttonFontWeight?: number;
8
24
  /** Optional extra weights to load for the body font (useful for UI labels, etc.) */
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Internal: the opt-out the generated affordance rule is written against.
3
+ *
4
+ * A button style may declare a trailing `affordance`, which the theme renders as
5
+ * a CSS `::after` on every button of that variant. An authored button that
6
+ * renders its own trailing icon must not also receive the theme's, or it shows
7
+ * two.
8
+ *
9
+ * Deliberately not exported from `./index`. This used to be public, and two
10
+ * block components reached past the theme to draw arrows of their own — one of
11
+ * them doubling up on the styles that declare an affordance, both of them
12
+ * overriding the twelve styles that deliberately declare none. Whether a button
13
+ * carries a trailing affordance is the style's decision; the only caller that
14
+ * legitimately opts out is the authored-button renderer, which reaches it
15
+ * through `themeButtonClassNameWithTrailingIcon`.
16
+ */
17
+ export declare const AFFORDANCE_SUPPRESS_CLASS = "rb-affordance-off";
@@ -16,7 +16,7 @@ export declare const BUTTON_CONTRAST_POLICY: {
16
16
  readonly nonTextMinimumRatio: 3;
17
17
  readonly gradientSamplesPerSegment: 20;
18
18
  readonly alphaBackgrounds: "reject-without-known-surface";
19
- readonly disabled: "retain-full-colour-contract";
19
+ readonly disabled: "validated-colour-pair-with-muted-control-opacity";
20
20
  };
21
21
  export type ButtonColourContractError = Readonly<{
22
22
  tag: 'unknown_palette_token';
@@ -19,3 +19,19 @@ export declare function themeButtonVariantClassNames(variant: ThemeButtonVariant
19
19
  export declare function themeButtonSizeClassName(size: ButtonSizeName): ThemeButtonSizeClassName;
20
20
  export declare function themeButtonSelector(variant: ThemeButtonVariantId, size?: ButtonSizeName): string;
21
21
  export declare function themeButtonClassName(spec: ThemeButtonClassSpec): ThemeButtonClassName;
22
+ /**
23
+ * Button classes for an authored button that renders its own trailing icon.
24
+ *
25
+ * A separate function rather than a flag on `themeButtonClassName`, because
26
+ * there is exactly one caller and it should stay visible in a diff. The name
27
+ * states what the caller knows to be true of its own markup — that it renders a
28
+ * trailing icon — rather than what the theme does about it. The consequence is
29
+ * the theme's to decide and to change; a caller naming the consequence would be
30
+ * asserting a policy it does not own, and would quietly become a lie the moment
31
+ * that policy moved.
32
+ *
33
+ * Do not reach for this to remove an arrow you simply do not want. A trailing
34
+ * affordance is declared by the button style, and a block overriding that is the
35
+ * defect this replaced.
36
+ */
37
+ export declare function themeButtonClassNameWithTrailingIcon(spec: ThemeButtonClassSpec): ThemeButtonClassName;
@@ -1,11 +1,5 @@
1
1
  import type { Theme } from '../schema';
2
2
  import type { ButtonSystem } from './types';
3
- /**
4
- * Class the `button` runtime node adds when it renders its own trailing icon,
5
- * so a node-level icon suppresses the theme's CSS `::after` affordance.
6
- * Shared so generator and renderer can't drift.
7
- */
8
- export declare const AFFORDANCE_SUPPRESS_CLASS = "rb-affordance-off";
9
3
  export interface GenerateButtonCssOptions {
10
4
  themeId: string;
11
5
  theme: Theme;
@@ -11,9 +11,9 @@ export declare function resolvedButtonColourDeclarations(colour: ResolvedButtonC
11
11
  }>): readonly ButtonCssDeclaration[];
12
12
  export declare function resolvedButtonFocusDeclarations(indicator: ResolvedButtonFocusIndicator, role?: string): readonly ButtonCssDeclaration[];
13
13
  /**
14
- * Disabled buttons retain their validated colour pair and add a non-layout
15
- * visual affordance. `currentColor` keeps the cue inside the same contrast
16
- * relationship, while retaining pointer events lets the not-allowed cursor
17
- * remain observable.
14
+ * Disabled buttons are deliberately muted as unavailable controls. Native
15
+ * disabled controls are exempt from active-control contrast requirements;
16
+ * opacity distinguishes the state without introducing a focus-like outline.
17
+ * Retaining pointer events lets the not-allowed cursor remain observable.
18
18
  */
19
19
  export declare const RESOLVED_BUTTON_DISABLED_DECLARATIONS: readonly ButtonCssDeclaration[];
@@ -1,4 +1,13 @@
1
- import type { FooterMode } from '../schema';
1
+ import { z } from 'zod';
2
+ export declare const footerModeSchema: z.ZodEnum<{
3
+ none: "none";
4
+ default: "default";
5
+ blocks: "blocks";
6
+ "default+blocks": "default+blocks";
7
+ }>;
8
+ export type FooterMode = z.infer<typeof footerModeSchema>;
9
+ /** Reads only SDK footer intent; unrelated config and theme fields are not authorities. */
10
+ export declare function resolveSdkFooterMode(config: unknown): FooterMode;
2
11
  export type FooterBrandVisibility = Readonly<{
3
12
  showLogo: boolean;
4
13
  showTitle: boolean;