@riverbankcms/sdk 0.141.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 (98) hide show
  1. package/dist/{PreviewEditorSidebar-Q-fy9GYw.mjs → PreviewEditorSidebar-Dk6Dt11f.mjs} +24 -15
  2. package/dist/{PreviewEditorUI-LYGzgk85.mjs → PreviewEditorUI-D6EQTsCA.mjs} +3 -3
  3. package/dist/{PreviewQueryProvider-CN0ewic5.mjs → PreviewQueryProvider-CC-EPkyQ.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-CoPYI5Jq.mjs → SdkPreviewModeRuntime-DH1n4ytY.mjs} +16 -11
  5. package/dist/{SiteChromeCustomizeContext-D8LePX8x.mjs → SiteChromeCustomizeContext-DunIzY0K.mjs} +117 -21
  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/endpoints.d.ts +0 -27
  10. package/dist/_dts/api/src/index.d.ts +1 -1
  11. package/dist/_dts/api/src/publicBookingService.d.ts +1 -0
  12. package/dist/_dts/api/src/sdkConfig/layout.d.ts +13 -0
  13. package/dist/_dts/api/src/sdkContracts.d.ts +3 -8
  14. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -31
  15. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +6 -1
  16. package/dist/_dts/billing/src/site-arrangements.d.ts +9 -5
  17. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +56 -0
  18. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +8 -0
  19. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +56 -0
  20. package/dist/_dts/commerce/src/purchase/stripeCommissionMetadata.d.ts +1 -2
  21. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +3099 -3122
  22. package/dist/_dts/editor-blocks/src/block-editor/ColourFieldOptionsProvider.d.ts +7 -0
  23. package/dist/_dts/editor-blocks/src/block-editor/colourFieldVisibility.d.ts +7 -0
  24. package/dist/_dts/editor-blocks/src/block-editor/preparedManifest.d.ts +2 -0
  25. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  26. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -2
  27. package/dist/_dts/preview-next/src/client/preview/PreviewFooterEditorPanel.d.ts +3 -6
  28. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -2
  29. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -2
  30. package/dist/_dts/preview-next/src/client/preview/footerInspection.d.ts +16 -0
  31. package/dist/_dts/preview-next/src/client/preview/sdkConfig.d.ts +6 -0
  32. package/dist/_dts/sdk/src/config/types.d.ts +2 -18
  33. package/dist/_dts/sdk/src/config/validation.d.ts +6 -0
  34. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -0
  35. package/dist/_dts/sdk/src/version.d.ts +1 -1
  36. package/dist/_dts/theme-core/src/footer/mode.d.ts +10 -1
  37. package/dist/_dts/theme-core/src/schema.d.ts +1 -7
  38. package/dist/_dts/theme-core/src/site-styles/effectivePageDesign.d.ts +32 -0
  39. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  40. package/dist/client/{BookingConsentAgreement-xJeYNdnb.mjs → BookingConsentAgreement-CnJeq3_r.mjs} +2 -2
  41. package/dist/client/{DiscountCodeDisclosure-DdT6uzl9.mjs → DiscountCodeDisclosure-BINEO6J9.mjs} +1 -1
  42. package/dist/client/{EventCombined.client-Cp28uYuM.mjs → EventCombined.client-srxNQ6sZ.mjs} +5 -5
  43. package/dist/client/{EventListing.client-CD6AJsMr.mjs → EventListing.client-DbyVyGkX.mjs} +2 -2
  44. package/dist/client/{LeafletStaticMap-DBsAi9-e.mjs → LeafletStaticMap-B-wpijzL.mjs} +1 -1
  45. package/dist/client/{accordion-6dwbOKYR.mjs → accordion-B-iUXU7n.mjs} +1 -1
  46. package/dist/client/{bookingForm-CZE9_qPQ.mjs → bookingForm-BXYPke5q.mjs} +5 -5
  47. package/dist/client/bookings.mjs +19 -9
  48. package/dist/client/{carousel-7VHGQARz.mjs → carousel-Cr4aj63H.mjs} +1 -1
  49. package/dist/client/{cart-Qg_mvQhh.mjs → cart-DibP9WWa.mjs} +3 -3
  50. package/dist/client/{checkout-D84rpgdr.mjs → checkout-CrSBVnL8.mjs} +3 -3
  51. package/dist/client/client.mjs +42 -54
  52. package/dist/client/{context-Ctp3T0Wr.mjs → context-Ces-AgdR.mjs} +1 -1
  53. package/dist/client/{dates-DJKFcI_N.mjs → dates-BXyNeNhB.mjs} +2 -2
  54. package/dist/client/{eventCalendar-CK31z3vs.mjs → eventCalendar-HwpPeqrH.mjs} +7 -7
  55. package/dist/client/{eventCombined-DiXd-ewn.mjs → eventCombined-BpFUkuEI.mjs} +3 -3
  56. package/dist/client/{eventDetails-CTRgt2DK.mjs → eventDetails-DK_agiWy.mjs} +4 -4
  57. package/dist/client/{eventListing-Dy9vi_j_.mjs → eventListing-DhzHqP1c.mjs} +3 -3
  58. package/dist/client/{eventRegistration-CnalYMr2.mjs → eventRegistration-BdQ_Dn2d.mjs} +6 -7
  59. package/dist/client/{form-eUiMveTT.mjs → form-B1frcuzy.mjs} +2 -2
  60. package/dist/client/{headerSection-Dy9kQpB1.mjs → headerSection-CT5z460s.mjs} +2 -2
  61. package/dist/client/hooks.mjs +27 -13
  62. package/dist/client/{locationMap-DalCmWU0.mjs → locationMap-CIQXB9i2.mjs} +2 -2
  63. package/dist/client/{newsletterForm-SDDPvhS0.mjs → newsletterForm-BYNYZSes.mjs} +2 -2
  64. package/dist/client/{pricing-OcMz4SnX.mjs → pricing-CbTlAsmt.mjs} +1 -1
  65. package/dist/client/{productDetail-BQrgHElM.mjs → productDetail-CR7Z3yjS.mjs} +3 -3
  66. package/dist/client/{productList-OnPn_UJj.mjs → productList-DXj00vzR.mjs} +3 -3
  67. package/dist/client/{propsDecoder-zBdsnS-N.mjs → propsDecoder-DiLiBdek.mjs} +19 -8
  68. package/dist/client/rendering/client.mjs +30 -11
  69. package/dist/client/rendering/islands.mjs +17 -17
  70. package/dist/client/rendering.mjs +85 -57
  71. package/dist/client/{scrollToBlock-BNM4Ob2Y.mjs → scrollToBlock-CrcbBf0h.mjs} +1 -1
  72. package/dist/client/{shop-Bv1fPTwQ.mjs → shop-DgqiB_1b.mjs} +6 -6
  73. package/dist/client/{shop-commerce-D4KNGaW8.mjs → shop-commerce-D_J781in.mjs} +5 -5
  74. package/dist/client/{shop-commerce-store-2N5EV0Rc.mjs → shop-commerce-store-PGUbDwqe.mjs} +1 -1
  75. package/dist/client/{shopShared-DvJGdHTV.mjs → shopShared-C_Bb2zwG.mjs} +3 -3
  76. package/dist/client/{useEventFilters-BBBvGDHQ.mjs → useEventFilters-CM17Xpr1.mjs} +5 -5
  77. package/dist/preview-next/before-render.mjs +0 -37
  78. package/dist/preview-next/client/runtime.mjs +4 -4
  79. package/dist/preview-next/keepAlive.mjs +0 -37
  80. package/dist/preview-next/middleware.mjs +0 -37
  81. package/dist/{previewAuthStore-Gjb6r6vz.mjs → previewAuthStore-oVttoRDO.mjs} +0 -37
  82. package/dist/{sdk-runtime-Defnbfzw.mjs → sdk-runtime-DhmuRhIX.mjs} +2 -2
  83. package/dist/{separator-CZXO3Sb0.mjs → separator-C3hlg9LH.mjs} +1 -1
  84. package/dist/server/components.mjs +68 -49
  85. package/dist/server/config-validation.mjs +31 -14
  86. package/dist/server/config.mjs +31 -14
  87. package/dist/server/data.mjs +27 -13
  88. package/dist/server/index.mjs +1 -38
  89. package/dist/server/next.mjs +28 -51
  90. package/dist/server/page-converter.mjs +19 -8
  91. package/dist/server/prebuild.mjs +1 -1
  92. package/dist/server/rendering/server.mjs +68 -51
  93. package/dist/server/rendering.mjs +68 -49
  94. package/dist/server/routing.mjs +40 -17
  95. package/dist/server/server.mjs +28 -51
  96. package/dist/server/theme-bridge.mjs +10 -8
  97. package/dist/server/theme.mjs +10 -8
  98. 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';
@@ -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
  };
@@ -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.141.0";
11
+ export declare const SDK_VERSION = "0.142.0";
@@ -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;
@@ -3486,12 +3486,6 @@ declare const footerMaxWidth: z.ZodEnum<{
3486
3486
  full: "full";
3487
3487
  container: "container";
3488
3488
  }>;
3489
- declare const footerMode: z.ZodEnum<{
3490
- none: "none";
3491
- default: "default";
3492
- blocks: "blocks";
3493
- "default+blocks": "default+blocks";
3494
- }>;
3495
3489
  export declare const footerSchema: z.ZodObject<{
3496
3490
  mode: z.ZodOptional<z.ZodEnum<{
3497
3491
  none: "none";
@@ -12336,7 +12330,7 @@ export type HeaderCtaGap = z.infer<typeof headerCtaGapSchema>;
12336
12330
  export type ThemeHeader = z.infer<typeof headerSchema>;
12337
12331
  export type FooterVariant = z.infer<typeof footerVariant>;
12338
12332
  export type FooterMaxWidth = z.infer<typeof footerMaxWidth>;
12339
- export type FooterMode = z.infer<typeof footerMode>;
12333
+ export type { FooterMode } from './footer/mode';
12340
12334
  export type ThemeFooter = z.infer<typeof footerSchema>;
12341
12335
  export type ThemeLayout = z.infer<typeof layoutSchema>;
12342
12336
  export type ThemeHero = z.infer<typeof heroSchema>;
@@ -0,0 +1,32 @@
1
+ import { type PageDesignIntent } from './pageDesignIntent';
2
+ import type { SiteStyleId } from './types';
3
+ /**
4
+ * Where an effective page design intent came from. `stored` means a persisted
5
+ * intent was found (and rebased onto the current site style); `default` means
6
+ * nothing was persisted and the site style's own defaults were used.
7
+ */
8
+ export type EffectivePageDesignIntentSource = 'stored' | 'default';
9
+ /**
10
+ * Resolution outcome for a page's effective design intent.
11
+ *
12
+ * `no-site-style` is not an error in this layer: it only says that there is no
13
+ * style to resolve against. Whether that is an invariant violation depends on
14
+ * whether the site is managed, which is a concept this layer does not know
15
+ * about. See issue 1462.
16
+ */
17
+ export type EffectivePageDesignIntentResolution = Readonly<{
18
+ kind: 'resolved';
19
+ intent: PageDesignIntent;
20
+ source: EffectivePageDesignIntentSource;
21
+ }> | Readonly<{
22
+ kind: 'no-site-style';
23
+ }>;
24
+ /**
25
+ * Every page with an applicable site style has an effective design, whether or
26
+ * not a design version was ever persisted. Missing persistence is ordinary
27
+ * default resolution, not a failure.
28
+ *
29
+ * Corrupt persisted state never reaches this function: callers keep their own
30
+ * invalid state untouched and only resolve `stored` values they could parse.
31
+ */
32
+ export declare function resolveEffectivePageDesignIntent(stored: PageDesignIntent | null, currentSiteStyleId: SiteStyleId | null): EffectivePageDesignIntentResolution;
@@ -26,6 +26,7 @@ export * from './headerOpeningSection';
26
26
  export * from './lookResolution';
27
27
  export * from './lookOptionGroups';
28
28
  export * from './logoBranding';
29
+ export * from './effectivePageDesign';
29
30
  export * from './pageDesignAuthority';
30
31
  export * from './pageDesignEditorErrors';
31
32
  export * from './pageDesignEditorCapabilities';
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { O as clsx } from "./colorStyles-3013aRAY.mjs";
3
- import { Pt as assertNever$2, fn as formatCurrencyAmount } from "./propsDecoder-zBdsnS-N.mjs";
4
- import { a as CheckIcon } from "./scrollToBlock-BNM4Ob2Y.mjs";
3
+ import { Pt as assertNever$2, fn as formatCurrencyAmount } from "./propsDecoder-DiLiBdek.mjs";
4
+ import { a as CheckIcon } from "./scrollToBlock-CrcbBf0h.mjs";
5
5
  import { n as RichText } from "./checkoutUrls-FL6lRkrt.mjs";
6
6
  import { useCallback, useEffect, useReducer, useRef } from "react";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { dt as themeButtonClassName } from "./propsDecoder-zBdsnS-N.mjs";
2
+ import { dt as themeButtonClassName } from "./propsDecoder-DiLiBdek.mjs";
3
3
  import { useId } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region ../blocks/src/system/runtime/api/types/discounts.ts
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { O as clsx } from "./colorStyles-3013aRAY.mjs";
3
- import { $ as getDayOfWeek, F as calendarQueryKey, H as getEventRuntimeFiltersKey, I as calendarWindowBounds, J as MONTH_NAMES, K as getCardOrientation, L as calendarWindowMonths$1, N as calendarMonthDate, P as calendarPageResponseError, Q as formatDateKey, Qt as getLocalScheduleDate, V as buildEventRuntimeFilters, X as addMonths, Xt as formatLocalScheduleDate, Z as buildCalendarViewport, dt as themeButtonClassName, et as getOrderedDayNames, it as shiftCalendarAnchorDate, nt as isSameCalendarDay, q as getContainerClass, rt as isToday, z as planCalendarMonthRanges } from "./propsDecoder-zBdsnS-N.mjs";
4
- import { a as EventCardClient, i as EventPaginatedListView, n as useEventPagination, o as EventFilters, r as toError, s as formatEventTeacherLine, t as useEventFilters } from "./useEventFilters-BBBvGDHQ.mjs";
5
- import { o as formatEventRemainingPlaces, p as isEventFull, t as formatEventPrice } from "./pricing-OcMz4SnX.mjs";
6
- import { a as formatTime, d as resolveEventLinkProps, o as groupEventsByDate, s as resolveEventTimeZone, t as formatDate, u as resolveEventCta } from "./dates-DJKFcI_N.mjs";
7
- import { n as useBlockApi } from "./context-Ctp3T0Wr.mjs";
3
+ import { $ as getDayOfWeek, F as calendarQueryKey, H as getEventRuntimeFiltersKey, I as calendarWindowBounds, J as MONTH_NAMES, K as getCardOrientation, L as calendarWindowMonths$1, N as calendarMonthDate, P as calendarPageResponseError, Q as formatDateKey, Qt as getLocalScheduleDate, V as buildEventRuntimeFilters, X as addMonths, Xt as formatLocalScheduleDate, Z as buildCalendarViewport, dt as themeButtonClassName, et as getOrderedDayNames, it as shiftCalendarAnchorDate, nt as isSameCalendarDay, q as getContainerClass, rt as isToday, z as planCalendarMonthRanges } from "./propsDecoder-DiLiBdek.mjs";
4
+ import { a as EventCardClient, i as EventPaginatedListView, n as useEventPagination, o as EventFilters, r as toError, s as formatEventTeacherLine, t as useEventFilters } from "./useEventFilters-CM17Xpr1.mjs";
5
+ import { o as formatEventRemainingPlaces, p as isEventFull, t as formatEventPrice } from "./pricing-CbTlAsmt.mjs";
6
+ import { a as formatTime, d as resolveEventLinkProps, o as groupEventsByDate, s as resolveEventTimeZone, t as formatDate, u as resolveEventCta } from "./dates-BXyNeNhB.mjs";
7
+ import { n as useBlockApi } from "./context-Ces-AgdR.mjs";
8
8
  import { t as createBodyThemePortalRoot } from "./themePortalRoot-AGs4cE7t.mjs";
9
9
  import { t as ModalShell } from "./ModalShell-CqkBvBIC.mjs";
10
10
  import React, { createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { V as buildEventRuntimeFilters } from "./propsDecoder-zBdsnS-N.mjs";
3
- import { i as EventPaginatedListView, n as useEventPagination, o as EventFilters, t as useEventFilters } from "./useEventFilters-BBBvGDHQ.mjs";
2
+ import { V as buildEventRuntimeFilters } from "./propsDecoder-DiLiBdek.mjs";
3
+ import { i as EventPaginatedListView, n as useEventPagination, o as EventFilters, t as useEventFilters } from "./useEventFilters-CM17Xpr1.mjs";
4
4
  import { useId, useMemo } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/events/EventListing.client.tsx
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { Nt as isRecord } from "./propsDecoder-zBdsnS-N.mjs";
2
+ import { Nt as isRecord } from "./propsDecoder-DiLiBdek.mjs";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region ../blocks/src/system/runtime/nodes/shared/LeafletStaticMap.tsx
@@ -1,4 +1,4 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-zBdsnS-N.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-DiLiBdek.mjs";
2
2
  //#region src/rendering/islands/enhancers/accordion.ts
3
3
  const decode = defineIslandPropsDecoder("accordion");
4
4
  function parseDefaultValues(value) {
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import { C as unsafeAsPassId, b as unsafeAsCustomerPassId, v as unsafeAsAppointmentResourceId, x as unsafeAsFormId, y as unsafeAsAppointmentServiceId } from "./colorStyles-3013aRAY.mjs";
3
- import { a as buildBookingPaymentSelectionViewModel, i as usePolling, n as StepIndicator, r as SpinnerNode, t as BookingConsentAgreement } from "./BookingConsentAgreement-xJeYNdnb.mjs";
4
- import { $t as parseBookingLocalDate, At as BOOKING_FORM_DATA_RESERVED_KEYS, Bt as reportWorkflowSuccess, Ct as resolveAppointmentCheckoutVerificationState, Dt as toSelectedCollectionOptionKind, Et as resolveDefaultBookingServiceId, Ft as clearWorkflowFeedback, It as err, Jt as formatBookingInstant, Ot as projectSelectedAppointmentConsentIntoForm, Pt as assertNever, Rt as okWith, St as prepareBookingSubmission, Tt as resolveBookingSiteId, Wt as addLocalScheduleDays, Xt as formatLocalScheduleDate, _t as getBookingRedirectStateFromLocation, bt as isBookingServiceSlidingAmountInRange, dt as themeButtonClassName, en as resolveBookingTimeZoneId, fn as formatCurrencyAmount, gt as formatBookingSubmissionPreparationError, ht as formatBookingCentsAsCurrencyInput, jt as isBookingRequirementConsentFieldId, kt as resolveSelectedAppointmentConsent, mt as deriveBookingFormViewState, pt as logger, t as defineIslandPropsDecoder, vt as getBookingServiceSlidingScale, wt as resolveBookingPaymentStep, xt as parseBookingCurrencyInputToCents, yt as getBookingSuccessMessage, zt as reportWorkflowError } from "./propsDecoder-zBdsnS-N.mjs";
5
- import { n as useBlockApi, t as BlockApiProvider } from "./context-Ctp3T0Wr.mjs";
3
+ import { a as buildBookingPaymentSelectionViewModel, i as usePolling, n as StepIndicator, r as SpinnerNode, t as BookingConsentAgreement } from "./BookingConsentAgreement-CnJeq3_r.mjs";
4
+ import { $t as parseBookingLocalDate, At as BOOKING_FORM_DATA_RESERVED_KEYS, Bt as reportWorkflowSuccess, Ct as resolveAppointmentCheckoutVerificationState, Dt as toSelectedCollectionOptionKind, Et as resolveDefaultBookingServiceId, Ft as clearWorkflowFeedback, It as err, Jt as formatBookingInstant, Ot as projectSelectedAppointmentConsentIntoForm, Pt as assertNever, Rt as okWith, St as prepareBookingSubmission, Tt as resolveBookingSiteId, Wt as addLocalScheduleDays, Xt as formatLocalScheduleDate, _t as getBookingRedirectStateFromLocation, bt as isBookingServiceSlidingAmountInRange, dt as themeButtonClassName, en as resolveBookingTimeZoneId, fn as formatCurrencyAmount, gt as formatBookingSubmissionPreparationError, ht as formatBookingCentsAsCurrencyInput, jt as isBookingRequirementConsentFieldId, kt as resolveSelectedAppointmentConsent, mt as deriveBookingFormViewState, pt as logger, t as defineIslandPropsDecoder, vt as getBookingServiceSlidingScale, wt as resolveBookingPaymentStep, xt as parseBookingCurrencyInputToCents, yt as getBookingSuccessMessage, zt as reportWorkflowError } from "./propsDecoder-DiLiBdek.mjs";
5
+ import { n as useBlockApi, t as BlockApiProvider } from "./context-Ces-AgdR.mjs";
6
6
  import { n as isSpamProtectionEnabled, r as AltchaWidget, t as getChallengeUrl } from "./src-B833rYRr.mjs";
7
- import { a as CheckIcon, i as StateIcon, n as useDiscountCodeUi, r as TerminalPanel, t as scrollToBlock } from "./scrollToBlock-BNM4Ob2Y.mjs";
8
- import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-DdT6uzl9.mjs";
7
+ import { a as CheckIcon, i as StateIcon, n as useDiscountCodeUi, r as TerminalPanel, t as scrollToBlock } from "./scrollToBlock-CrcbBf0h.mjs";
8
+ import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-BINEO6J9.mjs";
9
9
  import { t as FeedbackMessage } from "./FeedbackMessage-CtLvvS_d.mjs";
10
10
  import { n as getFieldValidationControlProps, t as FieldValidationMessage } from "./FieldValidationMessage-AYanWFb-.mjs";
11
11
  import { t as buildCheckoutReturnUrls } from "./checkoutUrls-FL6lRkrt.mjs";
@@ -3114,6 +3114,14 @@ function orderedLiveRunSessions(sessions) {
3114
3114
  return sessions.filter((session) => session.status !== "cancelled" && Number.isFinite(sessionStartMs(session))).sort((left, right) => sessionStartMs(left) - sessionStartMs(right));
3115
3115
  }
3116
3116
  //#endregion
3117
+ //#region ../theme-core/src/footer/mode.ts
3118
+ const footerModeSchema = z.enum([
3119
+ "default",
3120
+ "blocks",
3121
+ "default+blocks",
3122
+ "none"
3123
+ ]);
3124
+ //#endregion
3117
3125
  //#region ../theme-core/src/lib/media.ts
3118
3126
  const hotspotSchema = z.object({
3119
3127
  x: z.number().min(0).max(1),
@@ -7447,12 +7455,6 @@ const footerVariant = z.enum([
7447
7455
  "split"
7448
7456
  ]);
7449
7457
  const footerMaxWidth = z.enum(["container", "full"]);
7450
- const footerMode = z.enum([
7451
- "default",
7452
- "blocks",
7453
- "default+blocks",
7454
- "none"
7455
- ]);
7456
7458
  const footerNavLayoutMode = z.enum([
7457
7459
  "stack",
7458
7460
  "inline",
@@ -7541,9 +7543,9 @@ const footerSchema = z.object({
7541
7543
  /**
7542
7544
  * SDK-only footer rendering mode.
7543
7545
  *
7544
- * Backwards compatible: missing/undefined behaves as 'default'.
7546
+ * Historical persisted field; SDK rendering mode now lives in layout.footerMode.
7545
7547
  */
7546
- mode: footerMode.optional(),
7548
+ mode: footerModeSchema.optional(),
7547
7549
  variant: footerVariant,
7548
7550
  maxWidth: footerMaxWidth,
7549
7551
  showLogoText: z.boolean().optional(),
@@ -8125,6 +8127,15 @@ const publicEventBaseSchema = z.object({
8125
8127
  timeZone: z.string(),
8126
8128
  pricing: publicEventPricingSchema,
8127
8129
  paymentTerms: blockBookingPaymentTermsSchema,
8130
+ cancellationPolicy: z.object({ refunds: z.object({
8131
+ mode: z.enum([
8132
+ "never",
8133
+ "always",
8134
+ "cutoff"
8135
+ ]),
8136
+ cutoffHours: z.number(),
8137
+ method: z.enum(["original_payment_method", "site_credit"])
8138
+ }) }),
8128
8139
  consent: blockBookingConsentSchema.nullable(),
8129
8140
  accessRestriction: accessRestrictionSchema,
8130
8141
  allowedCategoryIds: z.array(z.string()),
@@ -15635,7 +15646,6 @@ const STRIPE_COMMISSION_FREE_REASONS = [
15635
15646
  "no_commission_plan",
15636
15647
  "billing_evidence_invalid",
15637
15648
  "fee_rounds_to_zero",
15638
- "non_commissionable_scope",
15639
15649
  "payment_not_stripe"
15640
15650
  ];
15641
15651
  const historicalContext = {
@@ -1,4 +1,4 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-zBdsnS-N.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-DiLiBdek.mjs";
2
2
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
3
3
  import { n as normalizeCarouselProps, t as CarouselNodeClient } from "./carousel.client-DQTjCVQT.mjs";
4
4
  import "react";
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-zBdsnS-N.mjs";
2
- import { t as CartController } from "./shop-commerce-D4KNGaW8.mjs";
3
- import { t as mountShopBlockIsland } from "./shopShared-DvJGdHTV.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-DiLiBdek.mjs";
2
+ import { t as CartController } from "./shop-commerce-D_J781in.mjs";
3
+ import { t as mountShopBlockIsland } from "./shopShared-C_Bb2zwG.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/cart.client.tsx
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-zBdsnS-N.mjs";
2
- import { n as CheckoutController } from "./shop-commerce-D4KNGaW8.mjs";
3
- import { t as mountShopBlockIsland } from "./shopShared-DvJGdHTV.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-DiLiBdek.mjs";
2
+ import { n as CheckoutController } from "./shop-commerce-D_J781in.mjs";
3
+ import { t as mountShopBlockIsland } from "./shopShared-C_Bb2zwG.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/checkout.client.tsx