@riverbankcms/sdk 0.103.0 → 0.104.1

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 (156) hide show
  1. package/dist/{PreviewEditorSidebar-DkNpCPja.mjs → PreviewEditorSidebar-CmaPXdKu.mjs} +148 -128
  2. package/dist/{PreviewEditorUI-DeNKtqk3.mjs → PreviewEditorUI-C5xRTh2b.mjs} +3 -3
  3. package/dist/{PreviewQueryProvider-ZF6TXq5Q.mjs → PreviewQueryProvider-CStABBUh.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-5bCsXK2y.mjs → SdkPreviewModeRuntime-Eks51NcN.mjs} +1204 -566
  5. package/dist/{SiteChromeCustomizeContext-CO1sTK_W.mjs → SiteChromeCustomizeContext-Bt8zb3qu.mjs} +5330 -4533
  6. package/dist/_dts/api/src/bookingVerticals.d.ts +64 -1
  7. package/dist/_dts/api/src/contentRuntime.d.ts +6 -3
  8. package/dist/_dts/api/src/endpoints.d.ts +10 -3
  9. package/dist/_dts/api/src/index.d.ts +1 -1
  10. package/dist/_dts/api/src/siteIcons.d.ts +39 -43
  11. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -3
  12. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +36 -7
  13. package/dist/_dts/block-form/src/widgets/SliderField/SliderField.d.ts +3 -3
  14. package/dist/_dts/block-form/src/widgets/SliderField/sliderValue.d.ts +36 -0
  15. package/dist/_dts/block-form/src/widgets/utils/readNumericUiConfig.d.ts +3 -0
  16. package/dist/_dts/blocks/src/index.d.ts +1 -1
  17. package/dist/_dts/blocks/src/system/blocks/feature-card-icons.d.ts +29 -29
  18. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +1 -0
  19. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -0
  20. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +135 -0
  21. package/dist/_dts/blocks/src/system/icons/generatedAssets.d.ts +28 -0
  22. package/dist/_dts/blocks/src/system/icons/index.d.ts +1 -0
  23. package/dist/_dts/blocks/src/system/icons/value.d.ts +3 -6
  24. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +240 -0
  25. package/dist/_dts/blocks/src/system/runtime/nodes/feature-card-icon.d.ts +1 -0
  26. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +2 -0
  27. package/dist/_dts/content-editor/src/ui/stores/generatedIconAssetsStore.d.ts +9 -0
  28. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +208 -0
  29. package/dist/_dts/editor/src/index.d.ts +3 -1
  30. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +14 -6
  31. package/dist/_dts/editor/src/primitives/rich-text/RichTextToolbar.d.ts +23 -4
  32. package/dist/_dts/editor/src/primitives/rich-text/config.d.ts +6 -0
  33. package/dist/_dts/editor/src/primitives/rich-text/extensions/RichTextLink.d.ts +1 -0
  34. package/dist/_dts/editor/src/primitives/rich-text/paste.d.ts +10 -0
  35. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +7 -0
  36. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +2 -1
  37. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +4 -4
  38. package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +2 -3
  39. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +4 -4
  40. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +4 -4
  41. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +3 -3
  42. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -3
  43. package/dist/_dts/editor-blocks/src/block-editor/blockHeaderActionPlan.d.ts +1 -5
  44. package/dist/_dts/editor-blocks/src/block-editor/featureCardIconActions.d.ts +25 -19
  45. package/dist/_dts/editor-blocks/src/block-editor/generatedIconApplyCoordination.d.ts +32 -0
  46. package/dist/_dts/editor-blocks/src/widgets/icon-picker/GeneratedIconLibraryContext.d.ts +28 -0
  47. package/dist/_dts/editor-blocks/src/widgets/icon-picker/index.d.ts +2 -0
  48. package/dist/_dts/editor-blocks/src/widgets/icon-picker/loaders.d.ts +7 -0
  49. package/dist/_dts/preview-next/src/client/preview/CustomizeBackgroundControlRows.d.ts +15 -0
  50. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -1
  51. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -1
  52. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -1
  53. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +4 -3
  54. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +4 -3
  55. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +4 -3
  56. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +3 -4
  57. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +5 -4
  58. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +44 -18
  59. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +4 -5
  60. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +22 -1
  61. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +12 -4
  62. package/dist/_dts/sdk/src/client/management/types.d.ts +3 -0
  63. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +0 -1
  64. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -2
  65. package/dist/_dts/sdk/src/version.d.ts +1 -1
  66. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  67. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +9 -9
  68. package/dist/_dts/theme-core/src/navigation/types.d.ts +2 -0
  69. package/dist/_dts/theme-core/src/palette/colors.d.ts +84 -0
  70. package/dist/_dts/theme-core/src/palette/{variants → curated}/brand-led.d.ts +12 -24
  71. package/dist/_dts/theme-core/src/palette/{variants → curated}/high-contrast.d.ts +9 -18
  72. package/dist/_dts/theme-core/src/palette/{variants → curated}/index.d.ts +67 -119
  73. package/dist/_dts/theme-core/src/palette/{variants → curated}/soft-natural.d.ts +12 -24
  74. package/dist/_dts/theme-core/src/palette/{variants → curated}/types.d.ts +50 -60
  75. package/dist/_dts/theme-core/src/palette/{variants → curated}/warm-dark.d.ts +6 -12
  76. package/dist/_dts/theme-core/src/palette/{variants → curated}/warm-neutral.d.ts +12 -24
  77. package/dist/_dts/theme-core/src/palette/editorState.d.ts +45 -0
  78. package/dist/_dts/theme-core/src/palette/index.d.ts +25 -14
  79. package/dist/_dts/theme-core/src/palette/legacyRuntimeProjection.d.ts +55 -0
  80. package/dist/_dts/theme-core/src/palette/legacySelection.d.ts +34 -0
  81. package/dist/_dts/theme-core/src/palette/libraryModel.d.ts +58 -0
  82. package/dist/_dts/theme-core/src/palette/paletteCompatibilityTransition.d.ts +232 -0
  83. package/dist/_dts/theme-core/src/palette/persistenceReadSource.d.ts +118 -0
  84. package/dist/_dts/theme-core/src/palette/resolveSelection.d.ts +50 -0
  85. package/dist/_dts/theme-core/src/palette/selection.d.ts +72 -0
  86. package/dist/_dts/theme-core/src/palette/sitePalettePersistence.d.ts +34 -0
  87. package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +58 -0
  88. package/dist/_dts/theme-core/src/schema.d.ts +9 -0
  89. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +22 -22
  90. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  91. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +31 -9
  92. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +22 -16
  93. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +6 -5
  94. package/dist/_dts/theme-core/src/site-styles/themeParity.d.ts +21 -0
  95. package/dist/_dts/ui/src/palette/PaletteTokenEditor.d.ts +2 -1
  96. package/dist/cli/index.mjs +7805 -7449
  97. package/dist/client/{DiscountCodeDisclosure-ChVZwVtS.mjs → DiscountCodeDisclosure-Dit2aItR.mjs} +1 -1
  98. package/dist/client/{EventCombined.client-PZtXbH6R.mjs → EventCombined.client-BnREyCjf.mjs} +3 -3
  99. package/dist/client/{EventListing.client-C4AMTXec.mjs → EventListing.client-0uHld51x.mjs} +2 -2
  100. package/dist/client/{LeafletStaticMap-B0w8_i0u.mjs → LeafletStaticMap-DJcvSfmj.mjs} +1 -1
  101. package/dist/client/{MagicLinkForm-DF0ZGhIu.mjs → MagicLinkForm-EAsIktfw.mjs} +2 -2
  102. package/dist/client/{StepIndicator-PccQ89Ct.mjs → StepIndicator-CRR17tYI.mjs} +2 -2
  103. package/dist/client/{accordion-CTNWT1lk.mjs → accordion-B47HIuuH.mjs} +1 -1
  104. package/dist/client/{bookingForm-DYixwPqP.mjs → bookingForm-I1E-8F9P.mjs} +6 -6
  105. package/dist/client/{buttons-CySQwlFs.mjs → buttons-BbPn8OKA.mjs} +1 -1
  106. package/dist/client/{carousel-W75iYR0M.mjs → carousel-OlM7SyBs.mjs} +1 -1
  107. package/dist/client/{cart-Ca_DGWQq.mjs → cart-BKpG5jz6.mjs} +3 -3
  108. package/dist/client/{checkout-STgKTsNh.mjs → checkout-Dmmr6qoU.mjs} +3 -3
  109. package/dist/client/client.mjs +8706 -8320
  110. package/dist/client/{courseRegistration-DQI1cu1u.mjs → courseRegistration-CflZiqGk.mjs} +7 -7
  111. package/dist/client/{eventCalendar-BJrHpofg.mjs → eventCalendar-BvoLWcp-.mjs} +5 -5
  112. package/dist/client/{eventCombined-DPtqBHaH.mjs → eventCombined-DsrO8t_t.mjs} +2 -2
  113. package/dist/client/{eventDetails-Brt31CDo.mjs → eventDetails-C3hxgcJm.mjs} +3 -3
  114. package/dist/client/{eventListing-BrClHJOq.mjs → eventListing-C-hb237X.mjs} +2 -2
  115. package/dist/client/{eventRegistration-DxlNlVUC.mjs → eventRegistration-B0gyzDGi.mjs} +7 -7
  116. package/dist/client/{form-Vp5cGzDF.mjs → form-C_RUi6oJ.mjs} +2 -2
  117. package/dist/client/{headerSection-DL2xjRgW.mjs → headerSection-IKQiD2U0.mjs} +3 -3
  118. package/dist/client/hooks.mjs +4845 -4663
  119. package/dist/client/{locationMap-B0EjoXQS.mjs → locationMap-8ZBrMzRJ.mjs} +2 -2
  120. package/dist/client/{newsletterForm-BlV9VRlq.mjs → newsletterForm-CYk3ucwj.mjs} +2 -2
  121. package/dist/client/{pricing-DmRD7Tjx.mjs → pricing-B5GmvfIH.mjs} +1 -1
  122. package/dist/client/{productDetail-BLTQsY2f.mjs → productDetail-BjS2Dqzo.mjs} +3 -3
  123. package/dist/client/{productList-R8lsMpRs.mjs → productList-BOHvC8My.mjs} +3 -3
  124. package/dist/client/{propsDecoder-DgAshF92.mjs → propsDecoder-WS6UEJwZ.mjs} +7 -0
  125. package/dist/client/rendering/client.mjs +3606 -3281
  126. package/dist/client/rendering/islands.mjs +18 -18
  127. package/dist/client/rendering.mjs +8569 -8190
  128. package/dist/client/{shop-DWjyje1s.mjs → shop-CON03-wN.mjs} +6 -6
  129. package/dist/client/{shop-commerce-CSKCR87d.mjs → shop-commerce-DlqrFgH8.mjs} +5 -5
  130. package/dist/client/{shop-commerce-store-DxPnE-iN.mjs → shop-commerce-store-l74-Kne6.mjs} +1 -1
  131. package/dist/client/{shopShared-OOeAkFq7.mjs → shopShared-CQheEXSg.mjs} +2 -2
  132. package/dist/client/{useDiscountCodeUi-Bp6X7XgG.mjs → useDiscountCodeUi-v6OluyWl.mjs} +1 -1
  133. package/dist/client/{useEventFilters-B489x9TO.mjs → useEventFilters-BqSTcNOf.mjs} +3 -3
  134. package/dist/client/{usePolling-BKP66stL.mjs → usePolling-DMfADjIF.mjs} +2 -2
  135. package/dist/preview-next/before-render.mjs +10 -3
  136. package/dist/preview-next/client/runtime.mjs +4 -4
  137. package/dist/preview-next/middleware.mjs +10 -3
  138. package/dist/{previewAuthStore-ByPPZqmp.mjs → previewAuthStore-CfquDtTh.mjs} +10 -3
  139. package/dist/{sdk-runtime-C8whifOy.mjs → sdk-runtime-BUmJ0DaT.mjs} +2 -2
  140. package/dist/{separator-CM2C5Axs.mjs → separator-Dd-JYok7.mjs} +1 -1
  141. package/dist/server/components.mjs +9871 -9557
  142. package/dist/server/config-validation.mjs +4869 -4687
  143. package/dist/server/config.mjs +4869 -4687
  144. package/dist/server/data.mjs +4846 -4664
  145. package/dist/server/index.mjs +11 -4
  146. package/dist/server/next.mjs +8665 -8344
  147. package/dist/server/page-converter.mjs +4749 -4575
  148. package/dist/server/prebuild.mjs +1 -1
  149. package/dist/server/rendering/server.mjs +9816 -9586
  150. package/dist/server/rendering.mjs +9880 -9566
  151. package/dist/server/routing.mjs +4975 -4704
  152. package/dist/server/server.mjs +4819 -4630
  153. package/dist/server/theme-bridge.mjs +207 -114
  154. package/dist/server/theme.mjs +92 -91
  155. package/dist/styles/index.css +20 -0
  156. package/package.json +1 -1
@@ -3,7 +3,7 @@
3
3
  * Warm Editorial, Modern Wellness, Calm Studio site styles.
4
4
  */
5
5
  export declare const warmNeutralClay: Readonly<{
6
- id: import("../../../../blocks/src/index").PaletteVariantId<"warm-neutral-clay">;
6
+ id: import("../../../../blocks/src/index").CuratedPaletteId<"warm-neutral-clay">;
7
7
  name: string;
8
8
  description: string;
9
9
  tags: Readonly<Partial<Readonly<{
@@ -12,14 +12,11 @@ export declare const warmNeutralClay: Readonly<{
12
12
  motion: import("../../../../blocks/src/index").StyleMotion;
13
13
  era: import("../../../../blocks/src/index").StyleEra;
14
14
  }>>>;
15
- mode: "light" | "dark";
16
- colors: readonly Readonly<{
17
- name: import("../../../../blocks/src/index").PaletteTokenName;
18
- hex: string;
19
- }>[];
15
+ mode: import("../../../../blocks/src/index").PaletteMode;
16
+ colors: import("../../../../blocks/src/index").PaletteColors;
20
17
  }>;
21
18
  export declare const warmNeutralCream: Readonly<{
22
- id: import("../../../../blocks/src/index").PaletteVariantId<"warm-neutral-cream">;
19
+ id: import("../../../../blocks/src/index").CuratedPaletteId<"warm-neutral-cream">;
23
20
  name: string;
24
21
  description: string;
25
22
  tags: Readonly<Partial<Readonly<{
@@ -28,14 +25,11 @@ export declare const warmNeutralCream: Readonly<{
28
25
  motion: import("../../../../blocks/src/index").StyleMotion;
29
26
  era: import("../../../../blocks/src/index").StyleEra;
30
27
  }>>>;
31
- mode: "light" | "dark";
32
- colors: readonly Readonly<{
33
- name: import("../../../../blocks/src/index").PaletteTokenName;
34
- hex: string;
35
- }>[];
28
+ mode: import("../../../../blocks/src/index").PaletteMode;
29
+ colors: import("../../../../blocks/src/index").PaletteColors;
36
30
  }>;
37
31
  export declare const warmNeutralSoftEarth: Readonly<{
38
- id: import("../../../../blocks/src/index").PaletteVariantId<"warm-neutral-soft-earth">;
32
+ id: import("../../../../blocks/src/index").CuratedPaletteId<"warm-neutral-soft-earth">;
39
33
  name: string;
40
34
  description: string;
41
35
  tags: Readonly<Partial<Readonly<{
@@ -44,14 +38,11 @@ export declare const warmNeutralSoftEarth: Readonly<{
44
38
  motion: import("../../../../blocks/src/index").StyleMotion;
45
39
  era: import("../../../../blocks/src/index").StyleEra;
46
40
  }>>>;
47
- mode: "light" | "dark";
48
- colors: readonly Readonly<{
49
- name: import("../../../../blocks/src/index").PaletteTokenName;
50
- hex: string;
51
- }>[];
41
+ mode: import("../../../../blocks/src/index").PaletteMode;
42
+ colors: import("../../../../blocks/src/index").PaletteColors;
52
43
  }>;
53
44
  export declare const warmNeutralForest: Readonly<{
54
- id: import("../../../../blocks/src/index").PaletteVariantId<"warm-neutral-forest">;
45
+ id: import("../../../../blocks/src/index").CuratedPaletteId<"warm-neutral-forest">;
55
46
  name: string;
56
47
  description: string;
57
48
  tags: Readonly<Partial<Readonly<{
@@ -60,9 +51,6 @@ export declare const warmNeutralForest: Readonly<{
60
51
  motion: import("../../../../blocks/src/index").StyleMotion;
61
52
  era: import("../../../../blocks/src/index").StyleEra;
62
53
  }>>>;
63
- mode: "light" | "dark";
64
- colors: readonly Readonly<{
65
- name: import("../../../../blocks/src/index").PaletteTokenName;
66
- hex: string;
67
- }>[];
54
+ mode: import("../../../../blocks/src/index").PaletteMode;
55
+ colors: import("../../../../blocks/src/index").PaletteColors;
68
56
  }>;
@@ -0,0 +1,45 @@
1
+ import type { PaletteColors, PaletteMode } from './colors';
2
+ import type { CuratedPaletteId } from './curated/types';
3
+ import type { ResolvedPaletteSelection } from './resolveSelection';
4
+ import type { PaletteCommand, SitePaletteId, SitePaletteVersion } from './selection';
5
+ export type PalettePreview = Readonly<{
6
+ kind: 'clean';
7
+ resolved: ResolvedPaletteSelection;
8
+ }> | Readonly<{
9
+ kind: 'selected';
10
+ resolved: ResolvedPaletteSelection;
11
+ }> | Readonly<{
12
+ kind: 'edited-curated';
13
+ sourcePaletteId: CuratedPaletteId;
14
+ colors: PaletteColors;
15
+ mode: PaletteMode;
16
+ }> | Readonly<{
17
+ kind: 'edited-site';
18
+ paletteId: SitePaletteId;
19
+ expectedVersion: SitePaletteVersion;
20
+ colors: PaletteColors;
21
+ mode: PaletteMode;
22
+ }> | Readonly<{
23
+ kind: 'new-site';
24
+ colors: PaletteColors;
25
+ mode: PaletteMode;
26
+ }>;
27
+ export type PaletteEditorState = Readonly<{
28
+ committed: ResolvedPaletteSelection;
29
+ preview: PalettePreview;
30
+ }>;
31
+ export type PaletteEditorAction = Readonly<{
32
+ kind: 'select';
33
+ resolved: ResolvedPaletteSelection;
34
+ }> | Readonly<{
35
+ kind: 'edit';
36
+ colors: PaletteColors;
37
+ mode: PaletteMode;
38
+ }> | Readonly<{
39
+ kind: 'create';
40
+ }> | Readonly<{
41
+ kind: 'cancel';
42
+ }>;
43
+ export declare function createPaletteEditorState(committed: ResolvedPaletteSelection): PaletteEditorState;
44
+ export declare function reducePaletteEditorState(state: PaletteEditorState, action: PaletteEditorAction): PaletteEditorState;
45
+ export declare function planPaletteCommand(state: PaletteEditorState): PaletteCommand;
@@ -1,14 +1,25 @@
1
- export * from "../mock-themes/all";
2
- export * from "./classifyColor";
3
- export * from "./expandPalette";
4
- export * from "./generateCssVars";
5
- export * from "./generateShades";
6
- export * from "./neutralScale";
7
- export * from "./types";
8
- export * from "./utils";
9
- export * from "./utils/paletteAccess";
10
- export * from "./extractPalette";
11
- export * from "./utils/fromVibrant";
12
- export * from "./utils/suggestRecipes";
13
- export * from "./recipes/allRecipes";
14
- export * from "./variants";
1
+ export * from '../mock-themes/all';
2
+ export * from './classifyColor';
3
+ export * from './expandPalette';
4
+ export * from './generateCssVars';
5
+ export * from './generateShades';
6
+ export * from './neutralScale';
7
+ export * from './types';
8
+ export * from './utils';
9
+ export * from './utils/paletteAccess';
10
+ export * from './extractPalette';
11
+ export * from './colors';
12
+ export * from './editorState';
13
+ export * from './libraryModel';
14
+ export * from './legacySelection';
15
+ export * from './legacyRuntimeProjection';
16
+ export * from './paletteCompatibilityTransition';
17
+ export * from './persistenceReadSource';
18
+ export * from './resolveSelection';
19
+ export * from './selection';
20
+ export * from './sitePalettePersistence';
21
+ export * from './themePaletteCompatibility';
22
+ export * from './utils/fromVibrant';
23
+ export * from './utils/suggestRecipes';
24
+ export * from './recipes/allRecipes';
25
+ export * from './curated';
@@ -0,0 +1,55 @@
1
+ import type { CuratedPaletteId, PaletteOverrides } from './curated';
2
+ import type { PaletteColors, PaletteMode } from './colors';
3
+ import type { PalettePersistenceReadResult, RuntimePaletteState } from './persistenceReadSource';
4
+ import type { LegacyPaletteRequestBaseline, PaletteCompatibilityState } from './paletteCompatibilityTransition';
5
+ import type { PaletteSelection } from './selection';
6
+ export type LegacyPaletteResponseProjection = Readonly<{
7
+ paletteVariantId: CuratedPaletteId | null;
8
+ paletteOverrides: PaletteOverrides | null;
9
+ }>;
10
+ declare const paletteCompatibilityBaselineBrand: unique symbol;
11
+ /**
12
+ * The complete compatibility representation of a resolved palette. This is
13
+ * deliberately narrower than the nullable legacy response wire shape: every
14
+ * successful authoritative write must persist one of these values.
15
+ */
16
+ export type PaletteCompatibilityBaseline = Readonly<{
17
+ paletteVariantId: CuratedPaletteId;
18
+ paletteOverrides: PaletteOverrides | null;
19
+ [paletteCompatibilityBaselineBrand]: true;
20
+ }>;
21
+ type ResolvedPaletteForLegacyProjection = Readonly<{
22
+ selection: PaletteSelection;
23
+ colors: PaletteColors;
24
+ mode: PaletteMode;
25
+ }>;
26
+ /**
27
+ * Derives the bounded, lossless compatibility baseline for a resolved
28
+ * authoritative selection. Site palettes retain their complete colours,
29
+ * using a preferred same-mode curated base when possible and a stable
30
+ * same-mode fallback otherwise.
31
+ */
32
+ export declare function derivePaletteCompatibilityBaseline(input: ResolvedPaletteForLegacyProjection & Readonly<{
33
+ preferredCuratedPaletteId?: CuratedPaletteId | null;
34
+ }>): PaletteCompatibilityBaseline;
35
+ /**
36
+ * One-way egress adapter for stale clients. It accepts canonical compatibility
37
+ * state only; its lossy curated-plus-overrides response is never a transition
38
+ * input.
39
+ */
40
+ export declare function projectPaletteCompatibilityStateForLegacyResponse(state: PaletteCompatibilityState, preferredCuratedPaletteId?: CuratedPaletteId | null): LegacyPaletteResponseProjection;
41
+ /**
42
+ * Projects runtime state without letting stale legacy columns override an
43
+ * explicit new authority. Unmigrated rows preserve their validated legacy
44
+ * identity so mixed-version clients do not receive an unnecessary rewrite.
45
+ */
46
+ export declare function projectRuntimePaletteStateForLegacyResponse(input: Readonly<{
47
+ runtimePaletteState: RuntimePaletteState | null;
48
+ persistenceRead: PalettePersistenceReadResult | null;
49
+ /**
50
+ * Parsed independently from active authority. A valid persisted request
51
+ * baseline remains the exact legacy egress value after a migrated reload.
52
+ */
53
+ legacyRequestBaseline: LegacyPaletteRequestBaseline | null;
54
+ }>): LegacyPaletteResponseProjection;
55
+ export {};
@@ -0,0 +1,34 @@
1
+ import type { Theme } from '../schema';
2
+ import { type PaletteTokenName } from '../tokens/themeColorTokens';
3
+ import { type HexColor, type PaletteColors, type PaletteMode } from './colors';
4
+ import type { CuratedPalette, CuratedPaletteId, PaletteOverrides } from './curated/types';
5
+ import type { SitePaletteOrigin } from './selection';
6
+ export type LegacyPaletteClassification = Readonly<{
7
+ kind: 'curated';
8
+ paletteId: CuratedPaletteId;
9
+ }> | Readonly<{
10
+ kind: 'site';
11
+ colors: PaletteColors;
12
+ mode: PaletteMode;
13
+ origin: Extract<SitePaletteOrigin, {
14
+ kind: 'onboarding' | 'legacy-customized';
15
+ }>;
16
+ }> | Readonly<{
17
+ kind: 'defaulted-curated';
18
+ paletteId: CuratedPaletteId;
19
+ reason: 'no-valid-legacy-palette';
20
+ }> | Readonly<{
21
+ kind: 'unresolved';
22
+ reason: 'missing-palette-sources' | 'invalid-saved-theme-palette' | 'overrides-without-base-palette';
23
+ }>;
24
+ export type LegacyOnboardingPaletteEvidence = Readonly<{
25
+ sourceKey: string | null;
26
+ candidateColors: Readonly<Partial<Record<PaletteTokenName, HexColor>>> | null;
27
+ }>;
28
+ export declare function classifyLegacyPaletteSelection(input: Readonly<{
29
+ basePalette: CuratedPalette | null;
30
+ overrides: PaletteOverrides | null;
31
+ savedThemePalette: Theme['palette'] | null;
32
+ fallbackPaletteId: CuratedPaletteId | null;
33
+ onboardingEvidence: LegacyOnboardingPaletteEvidence;
34
+ }>): LegacyPaletteClassification;
@@ -0,0 +1,58 @@
1
+ import type { CuratedPalette, CuratedPaletteId } from './curated/types';
2
+ import type { PaletteColors, PaletteMode } from './colors';
3
+ import type { PaletteSelection, SitePalette, SitePaletteId, SitePaletteOrigin, SitePaletteVersion } from './selection';
4
+ export type PaletteSwatch = readonly [
5
+ PaletteColors['background'],
6
+ PaletteColors['surface'],
7
+ PaletteColors['primary'],
8
+ PaletteColors['secondary'],
9
+ PaletteColors['accent']
10
+ ];
11
+ export type CuratedPaletteLibraryItem = Readonly<{
12
+ kind: 'curated';
13
+ paletteId: CuratedPaletteId;
14
+ colors: PaletteColors;
15
+ mode: PaletteMode;
16
+ swatch: PaletteSwatch;
17
+ accessibleLabel: string;
18
+ selected: boolean;
19
+ }>;
20
+ export type SitePaletteLibraryItem = Readonly<{
21
+ kind: 'site';
22
+ paletteId: SitePaletteId;
23
+ colors: PaletteColors;
24
+ mode: PaletteMode;
25
+ origin: SitePaletteOrigin;
26
+ version: SitePaletteVersion;
27
+ swatch: PaletteSwatch;
28
+ accessibleLabel: string;
29
+ selected: boolean;
30
+ }>;
31
+ export type PaletteLibraryItem = CuratedPaletteLibraryItem | SitePaletteLibraryItem;
32
+ export type PaletteLibraryReadModel = Readonly<{
33
+ activeSelection: PaletteSelection;
34
+ yours: readonly SitePaletteLibraryItem[];
35
+ suggested: readonly CuratedPaletteLibraryItem[];
36
+ more: readonly CuratedPaletteLibraryItem[];
37
+ }>;
38
+ export type PaletteLibraryReadModelError = Readonly<{
39
+ kind: 'active-curated-palette-missing';
40
+ paletteId: CuratedPaletteId;
41
+ }> | Readonly<{
42
+ kind: 'active-site-palette-missing';
43
+ paletteId: SitePaletteId;
44
+ }>;
45
+ export type PaletteLibraryReadModelResult = Readonly<{
46
+ ok: true;
47
+ model: PaletteLibraryReadModel;
48
+ }> | Readonly<{
49
+ ok: false;
50
+ error: PaletteLibraryReadModelError;
51
+ }>;
52
+ export declare function buildPaletteLibraryReadModel(input: Readonly<{
53
+ activeSelection: PaletteSelection;
54
+ sitePalettes: readonly SitePalette[];
55
+ curatedPalettes: readonly CuratedPalette[];
56
+ recommendations: readonly CuratedPaletteId[];
57
+ }>): PaletteLibraryReadModelResult;
58
+ export declare function paletteSelectionForItem(item: PaletteLibraryItem): PaletteSelection;
@@ -0,0 +1,232 @@
1
+ import { type PaletteColors, type PaletteMode } from './colors';
2
+ import { type CuratedPaletteId, type PaletteOverrides } from './curated';
3
+ import type { LegacyPaletteClassification } from './legacySelection';
4
+ import { type ResolvedCuratedPaletteSelection, type ResolvedPaletteSelection, type ResolvedSitePaletteSelection } from './resolveSelection';
5
+ import type { PaletteSelection, SitePalette, SitePaletteOrigin, TrustedPaletteCommand } from './selection';
6
+ import type { CompatibleThemePalette } from './themePaletteCompatibility';
7
+ export type ResolvedCompatibilityPalette = Readonly<{
8
+ colors: PaletteColors;
9
+ mode: PaletteMode;
10
+ }>;
11
+ export type MaterializedSitePaletteTarget = Readonly<{
12
+ kind: 'materialized-site';
13
+ colors: PaletteColors;
14
+ mode: PaletteMode;
15
+ }>;
16
+ /** A legacy PATCH field has an explicit operation; null is only a value at the wire boundary. */
17
+ export type LegacyPaletteFieldPatch<Value> = Readonly<{
18
+ kind: 'preserve';
19
+ }> | Readonly<{
20
+ kind: 'clear';
21
+ }> | Readonly<{
22
+ kind: 'set';
23
+ value: Value;
24
+ }>;
25
+ export type LegacyPaletteSavePatch = Readonly<{
26
+ paletteVariantId: LegacyPaletteFieldPatch<CuratedPaletteId>;
27
+ paletteOverrides: LegacyPaletteFieldPatch<PaletteOverrides>;
28
+ }>;
29
+ declare const persistedLegacyPaletteRequestEvidenceBrand: unique symbol;
30
+ /**
31
+ * Validated evidence read from the persisted legacy columns. This is ingress
32
+ * data only: it deliberately cannot be confused with a legacy response
33
+ * projection or a resolved palette.
34
+ */
35
+ export type PersistedLegacyPaletteRequestEvidence = Readonly<{
36
+ paletteVariantId: CuratedPaletteId;
37
+ paletteOverrides: PaletteOverrides | null;
38
+ [persistedLegacyPaletteRequestEvidenceBrand]: true;
39
+ }>;
40
+ export type LegacyPaletteRequestBaselineError = Readonly<{
41
+ kind: 'missing-curated-palette';
42
+ }> | Readonly<{
43
+ kind: 'unknown-curated-palette';
44
+ value: string;
45
+ }> | Readonly<{
46
+ kind: 'invalid-palette-overrides';
47
+ }>;
48
+ /**
49
+ * The request baseline is intentionally not inferred from compatibility state.
50
+ * Existing records either carry their persisted legacy evidence or state why it
51
+ * cannot be used. Only a genuinely new record may use the absent variant.
52
+ */
53
+ export type LegacyPaletteRequestBaseline = Readonly<{
54
+ kind: 'persisted';
55
+ evidence: PersistedLegacyPaletteRequestEvidence;
56
+ }> | Readonly<{
57
+ kind: 'absent';
58
+ }> | Readonly<{
59
+ kind: 'unusable';
60
+ error: LegacyPaletteRequestBaselineError;
61
+ }>;
62
+ /** Parses legacy persistence columns into branded request-side evidence. */
63
+ export declare function parsePersistedLegacyPaletteRequestBaseline(input: Readonly<{
64
+ paletteVariantId: unknown;
65
+ paletteOverrides: unknown;
66
+ }>): LegacyPaletteRequestBaseline;
67
+ /** Marks the one case where request omission may use creation fallback values. */
68
+ export declare function absentLegacyPaletteRequestBaseline(): LegacyPaletteRequestBaseline;
69
+ /** Wraps already validated, branded persistence evidence for PATCH normalization. */
70
+ export declare function legacyPaletteRequestBaselineFromPersistedEvidence(evidence: PersistedLegacyPaletteRequestEvidence): LegacyPaletteRequestBaseline;
71
+ declare const legacyPaletteSaveSelectionBrand: unique symbol;
72
+ /** A complete legacy save request after PATCH fields have been normalized. */
73
+ export type LegacyPaletteSaveSelection = Readonly<{
74
+ paletteVariantId: CuratedPaletteId;
75
+ paletteOverrides: PaletteOverrides | null;
76
+ [legacyPaletteSaveSelectionBrand]: true;
77
+ }>;
78
+ export type LegacyPaletteSaveNormalizationError = Readonly<{
79
+ kind: 'missing-base-palette';
80
+ }>;
81
+ export type LegacyPaletteSaveNormalizationResult = Readonly<{
82
+ ok: true;
83
+ selection: LegacyPaletteSaveSelection;
84
+ }> | Readonly<{
85
+ ok: false;
86
+ error: LegacyPaletteSaveNormalizationError;
87
+ }>;
88
+ export type LegacyResolvedPaletteSelection = Readonly<{
89
+ kind: 'curated';
90
+ selection: Extract<PaletteSelection, {
91
+ kind: 'curated';
92
+ }>;
93
+ colors: PaletteColors;
94
+ mode: PaletteMode;
95
+ }> | Readonly<{
96
+ kind: 'site';
97
+ colors: PaletteColors;
98
+ mode: PaletteMode;
99
+ origin: Extract<SitePaletteOrigin, {
100
+ kind: 'onboarding' | 'legacy-customized';
101
+ }>;
102
+ }>;
103
+ export type PaletteCompatibilityStateError = Readonly<{
104
+ kind: 'invalid-authoritative-selection';
105
+ }> | Readonly<{
106
+ kind: 'invalid-legacy-evidence';
107
+ reason: 'unknown-curated-palette';
108
+ }> | Readonly<{
109
+ kind: 'unresolved-legacy-selection';
110
+ reason: Extract<LegacyPaletteClassification, {
111
+ kind: 'unresolved';
112
+ }>['reason'];
113
+ }> | Readonly<{
114
+ kind: 'defaulted-legacy-selection';
115
+ paletteId: CuratedPaletteId;
116
+ }>;
117
+ export type PaletteCompatibilityState = Readonly<{
118
+ kind: 'authoritative';
119
+ resolved: ResolvedPaletteSelection;
120
+ }> | Readonly<{
121
+ kind: 'legacy-unmigrated';
122
+ resolved: LegacyResolvedPaletteSelection;
123
+ }> | Readonly<{
124
+ kind: 'uninitialized';
125
+ }> | Readonly<{
126
+ kind: 'invalid';
127
+ error: PaletteCompatibilityStateError;
128
+ }>;
129
+ export type PaletteCompatibilityIntent = Readonly<{
130
+ kind: 'preserve';
131
+ }> | Readonly<{
132
+ kind: 'current-command';
133
+ command: TrustedPaletteCommand;
134
+ selectedSitePalette: SitePalette | null;
135
+ }> | Readonly<{
136
+ kind: 'legacy-save';
137
+ selection: LegacyPaletteSaveSelection;
138
+ }> | Readonly<{
139
+ kind: 'theme-palette-save';
140
+ themePalette: CompatibleThemePalette;
141
+ fallbackCuratedPaletteId: CuratedPaletteId | null;
142
+ }>;
143
+ export type PaletteCompatibilityTransitionError = Readonly<{
144
+ kind: 'invalid-state';
145
+ error: PaletteCompatibilityStateError;
146
+ }> | Readonly<{
147
+ kind: 'missing-base-palette';
148
+ }> | Readonly<{
149
+ kind: 'unknown-curated-palette';
150
+ paletteId: CuratedPaletteId;
151
+ }> | Readonly<{
152
+ kind: 'missing-selected-site-palette';
153
+ paletteId: Extract<PaletteSelection, {
154
+ kind: 'site';
155
+ }>['paletteId'];
156
+ }> | Readonly<{
157
+ kind: 'selected-site-palette-mismatch';
158
+ expectedPaletteId: Extract<PaletteSelection, {
159
+ kind: 'site';
160
+ }>['paletteId'];
161
+ receivedPaletteId: SitePalette['id'];
162
+ }> | Readonly<{
163
+ kind: 'site-update-not-authoritative';
164
+ }> | Readonly<{
165
+ kind: 'site-update-palette-mismatch';
166
+ expectedPaletteId: SitePalette['id'];
167
+ receivedPaletteId: SitePalette['id'];
168
+ }> | Readonly<{
169
+ kind: 'stale-site-palette-update';
170
+ paletteId: SitePalette['id'];
171
+ }>;
172
+ /**
173
+ * This is deliberately a correlated ADT rather than a command/target product.
174
+ * Every variant carries only the target evidence that its action can legally use.
175
+ */
176
+ export type PaletteCompatibilityTransitionPlan = Readonly<{
177
+ kind: 'preserve-curated';
178
+ command: Extract<TrustedPaletteCommand, {
179
+ kind: 'preserve';
180
+ }>;
181
+ target: ResolvedCuratedPaletteSelection;
182
+ }> | Readonly<{
183
+ kind: 'preserve-existing-site';
184
+ command: Extract<TrustedPaletteCommand, {
185
+ kind: 'preserve';
186
+ }>;
187
+ target: ResolvedSitePaletteSelection;
188
+ }> | Readonly<{
189
+ kind: 'select-curated';
190
+ command: Extract<TrustedPaletteCommand, {
191
+ kind: 'select';
192
+ }>;
193
+ target: ResolvedCuratedPaletteSelection;
194
+ }> | Readonly<{
195
+ kind: 'select-existing-site';
196
+ command: Extract<TrustedPaletteCommand, {
197
+ kind: 'select';
198
+ }>;
199
+ target: ResolvedSitePaletteSelection;
200
+ }> | Readonly<{
201
+ kind: 'create-site';
202
+ command: Extract<TrustedPaletteCommand, {
203
+ kind: 'create-site';
204
+ }>;
205
+ target: MaterializedSitePaletteTarget;
206
+ }> | Readonly<{
207
+ kind: 'update-existing-site';
208
+ command: Extract<TrustedPaletteCommand, {
209
+ kind: 'update-site';
210
+ }>;
211
+ target: ResolvedSitePaletteSelection;
212
+ }>;
213
+ export type PaletteCompatibilityTransitionResult = Readonly<{
214
+ ok: true;
215
+ plan: PaletteCompatibilityTransitionPlan;
216
+ }> | Readonly<{
217
+ ok: false;
218
+ error: PaletteCompatibilityTransitionError;
219
+ }>;
220
+ export declare function paletteCompatibilityStateFromLegacyClassification(classification: LegacyPaletteClassification): PaletteCompatibilityState;
221
+ /**
222
+ * Applies independent PATCH operations at the legacy ingress boundary. A
223
+ * fallback supplies omitted fields only for explicitly uninitialized creation;
224
+ * an explicit variant clear always selects the caller-supplied fallback.
225
+ */
226
+ export declare function normalizeLegacyPaletteSavePatch(input: Readonly<{
227
+ patch: LegacyPaletteSavePatch;
228
+ baseline: LegacyPaletteRequestBaseline;
229
+ fallbackCuratedPaletteId: CuratedPaletteId | null;
230
+ }>): LegacyPaletteSaveNormalizationResult;
231
+ export declare function planPaletteTransition(state: PaletteCompatibilityState, intent: PaletteCompatibilityIntent): PaletteCompatibilityTransitionResult;
232
+ export {};
@@ -0,0 +1,118 @@
1
+ import { type CuratedPaletteId, type PaletteOverrides } from './curated';
2
+ import type { Theme } from '../schema';
3
+ import type { PaletteSelection } from './selection';
4
+ import { type SitePalette } from './selection';
5
+ import { resolvedCuratedPaletteSelection, resolvedSitePaletteSelection, type ResolvedPaletteSelection } from './resolveSelection';
6
+ import type { SitePaletteParseError } from './sitePalettePersistence';
7
+ export type PalettePersistenceReadSource = Readonly<{
8
+ kind: 'new-selection';
9
+ selection: PaletteSelection;
10
+ }> | Readonly<{
11
+ kind: 'legacy-selection';
12
+ paletteVariant: LegacyPaletteVariantEvidence;
13
+ paletteOverrides: PaletteOverrides | null;
14
+ }>;
15
+ /** Legacy catalog IDs are migration evidence, not authoritative references. */
16
+ export type LegacyPaletteVariantEvidence = Readonly<{
17
+ kind: 'known';
18
+ paletteId: CuratedPaletteId;
19
+ }> | Readonly<{
20
+ kind: 'unknown';
21
+ value: string;
22
+ }> | Readonly<{
23
+ kind: 'missing';
24
+ }>;
25
+ export type PalettePersistenceReadError = Readonly<{
26
+ kind: 'dual-active-reference';
27
+ }> | Readonly<{
28
+ kind: 'unknown-active-curated-palette';
29
+ value: string;
30
+ }> | Readonly<{
31
+ kind: 'invalid-active-site-palette-id';
32
+ value: string;
33
+ }> | Readonly<{
34
+ kind: 'invalid-legacy-overrides';
35
+ }>;
36
+ export type PalettePersistenceReadResult = Readonly<{
37
+ ok: true;
38
+ source: PalettePersistenceReadSource;
39
+ }> | Readonly<{
40
+ ok: false;
41
+ error: PalettePersistenceReadError;
42
+ }>;
43
+ /**
44
+ * Transport state remains flat for existing runtime consumers. Its migrated
45
+ * variants are nevertheless correlated: `authority`, selection, and version
46
+ * cannot describe independent sources of truth.
47
+ */
48
+ export type RuntimePaletteState = Readonly<{
49
+ kind: 'migrated';
50
+ authority: 'curated';
51
+ selection: Extract<PaletteSelection, {
52
+ kind: 'curated';
53
+ }>;
54
+ colors: ReturnType<typeof resolvedCuratedPaletteSelection>['colors'];
55
+ mode: ReturnType<typeof resolvedCuratedPaletteSelection>['mode'];
56
+ sitePaletteVersion: null;
57
+ }> | Readonly<{
58
+ kind: 'migrated';
59
+ authority: 'site';
60
+ selection: Extract<PaletteSelection, {
61
+ kind: 'site';
62
+ }>;
63
+ colors: ReturnType<typeof resolvedSitePaletteSelection>['colors'];
64
+ mode: ReturnType<typeof resolvedSitePaletteSelection>['mode'];
65
+ sitePaletteVersion: ReturnType<typeof resolvedSitePaletteSelection>['version'];
66
+ }> | Readonly<{
67
+ kind: 'legacy-unmigrated';
68
+ colors: ResolvedPaletteSelection['colors'];
69
+ mode: ResolvedPaletteSelection['mode'];
70
+ }> | Readonly<{
71
+ kind: 'invalid';
72
+ reason: PalettePersistenceReadError['kind'] | 'invalid-saved-theme-palette' | 'active-site-palette-missing' | 'invalid-active-site-palette' | 'active-site-palette-mismatch' | 'active-curated-palette-missing';
73
+ }>;
74
+ export type ActiveSitePaletteAuthority = Readonly<{
75
+ kind: 'missing';
76
+ }> | Readonly<{
77
+ kind: 'malformed';
78
+ error: SitePaletteParseError;
79
+ }> | Readonly<{
80
+ kind: 'resolved';
81
+ palette: SitePalette;
82
+ }>;
83
+ export type RuntimePaletteResolutionError = Readonly<{
84
+ kind: 'runtime-curated-palette-missing';
85
+ paletteId: CuratedPaletteId;
86
+ }> | Readonly<{
87
+ kind: 'runtime-curated-palette-mismatch';
88
+ paletteId: CuratedPaletteId;
89
+ }>;
90
+ export type RuntimePaletteResolution = Readonly<{
91
+ ok: true;
92
+ resolved: ResolvedPaletteSelection;
93
+ }> | Readonly<{
94
+ ok: false;
95
+ error: RuntimePaletteResolutionError;
96
+ }>;
97
+ /**
98
+ * Rehydrates a runtime transport payload through the core-owned constructors.
99
+ * It is intentionally checked, and replaces the old unsafe brand cast bridge.
100
+ */
101
+ export declare function resolveMigratedRuntimePaletteState(state: Extract<RuntimePaletteState, {
102
+ kind: 'migrated';
103
+ }>): RuntimePaletteResolution;
104
+ export declare function runtimePaletteStateFromPersisted(input: Readonly<{
105
+ parsed: PalettePersistenceReadResult;
106
+ savedThemePalette: Theme['palette'];
107
+ activeSitePaletteAuthority: ActiveSitePaletteAuthority;
108
+ }>): RuntimePaletteState;
109
+ /**
110
+ * Bounded rollout adapter. New active references are authoritative whenever
111
+ * present; legacy fields are parsed only while both references are absent.
112
+ */
113
+ export declare function parsePalettePersistenceReadSource(input: Readonly<{
114
+ activeCuratedPaletteId: string | null;
115
+ activeSitePaletteId: string | null;
116
+ legacyPaletteVariantId: string | null;
117
+ legacyPaletteOverrides: unknown;
118
+ }>): PalettePersistenceReadResult;