@riverbankcms/sdk 0.103.0 → 0.104.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 (149) hide show
  1. package/dist/{PreviewEditorSidebar-DkNpCPja.mjs → PreviewEditorSidebar-ywqcYjTB.mjs} +148 -128
  2. package/dist/{PreviewEditorUI-DeNKtqk3.mjs → PreviewEditorUI-DApUNF6g.mjs} +3 -3
  3. package/dist/{PreviewQueryProvider-ZF6TXq5Q.mjs → PreviewQueryProvider-CStABBUh.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-5bCsXK2y.mjs → SdkPreviewModeRuntime-DmHCcIMO.mjs} +1199 -563
  5. package/dist/{SiteChromeCustomizeContext-CO1sTK_W.mjs → SiteChromeCustomizeContext-BV9GU-3C.mjs} +3145 -2452
  6. package/dist/_dts/api/src/contentRuntime.d.ts +6 -3
  7. package/dist/_dts/api/src/endpoints.d.ts +10 -3
  8. package/dist/_dts/api/src/index.d.ts +1 -1
  9. package/dist/_dts/api/src/siteIcons.d.ts +39 -43
  10. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -3
  11. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +36 -7
  12. package/dist/_dts/block-form/src/widgets/SliderField/SliderField.d.ts +3 -3
  13. package/dist/_dts/block-form/src/widgets/SliderField/sliderValue.d.ts +36 -0
  14. package/dist/_dts/block-form/src/widgets/utils/readNumericUiConfig.d.ts +3 -0
  15. package/dist/_dts/blocks/src/index.d.ts +1 -1
  16. package/dist/_dts/blocks/src/system/blocks/feature-card-icons.d.ts +29 -29
  17. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +1 -0
  18. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -0
  19. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +135 -0
  20. package/dist/_dts/blocks/src/system/icons/generatedAssets.d.ts +28 -0
  21. package/dist/_dts/blocks/src/system/icons/index.d.ts +1 -0
  22. package/dist/_dts/blocks/src/system/icons/value.d.ts +3 -6
  23. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +240 -0
  24. package/dist/_dts/blocks/src/system/runtime/nodes/feature-card-icon.d.ts +1 -0
  25. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +2 -0
  26. package/dist/_dts/content-editor/src/ui/stores/generatedIconAssetsStore.d.ts +9 -0
  27. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +208 -0
  28. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +7 -0
  29. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +2 -1
  30. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +4 -4
  31. package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +2 -3
  32. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +4 -4
  33. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +4 -4
  34. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +3 -3
  35. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -3
  36. package/dist/_dts/editor-blocks/src/block-editor/blockHeaderActionPlan.d.ts +1 -5
  37. package/dist/_dts/editor-blocks/src/block-editor/featureCardIconActions.d.ts +25 -19
  38. package/dist/_dts/editor-blocks/src/block-editor/generatedIconApplyCoordination.d.ts +32 -0
  39. package/dist/_dts/editor-blocks/src/widgets/icon-picker/GeneratedIconLibraryContext.d.ts +28 -0
  40. package/dist/_dts/editor-blocks/src/widgets/icon-picker/index.d.ts +2 -0
  41. package/dist/_dts/editor-blocks/src/widgets/icon-picker/loaders.d.ts +7 -0
  42. package/dist/_dts/preview-next/src/client/preview/CustomizeBackgroundControlRows.d.ts +15 -0
  43. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -1
  44. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -1
  45. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -1
  46. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +4 -3
  47. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +4 -3
  48. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +4 -3
  49. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +3 -4
  50. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +5 -4
  51. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +44 -18
  52. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +4 -5
  53. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +22 -1
  54. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +12 -4
  55. package/dist/_dts/sdk/src/client/management/types.d.ts +3 -0
  56. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +0 -1
  57. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -2
  58. package/dist/_dts/sdk/src/version.d.ts +1 -1
  59. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  60. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +9 -9
  61. package/dist/_dts/theme-core/src/navigation/types.d.ts +2 -0
  62. package/dist/_dts/theme-core/src/palette/colors.d.ts +84 -0
  63. package/dist/_dts/theme-core/src/palette/{variants → curated}/brand-led.d.ts +12 -24
  64. package/dist/_dts/theme-core/src/palette/{variants → curated}/high-contrast.d.ts +9 -18
  65. package/dist/_dts/theme-core/src/palette/{variants → curated}/index.d.ts +67 -119
  66. package/dist/_dts/theme-core/src/palette/{variants → curated}/soft-natural.d.ts +12 -24
  67. package/dist/_dts/theme-core/src/palette/{variants → curated}/types.d.ts +50 -60
  68. package/dist/_dts/theme-core/src/palette/{variants → curated}/warm-dark.d.ts +6 -12
  69. package/dist/_dts/theme-core/src/palette/{variants → curated}/warm-neutral.d.ts +12 -24
  70. package/dist/_dts/theme-core/src/palette/editorState.d.ts +45 -0
  71. package/dist/_dts/theme-core/src/palette/index.d.ts +25 -14
  72. package/dist/_dts/theme-core/src/palette/legacyRuntimeProjection.d.ts +38 -0
  73. package/dist/_dts/theme-core/src/palette/legacySelection.d.ts +34 -0
  74. package/dist/_dts/theme-core/src/palette/libraryModel.d.ts +58 -0
  75. package/dist/_dts/theme-core/src/palette/paletteCompatibilityTransition.d.ts +241 -0
  76. package/dist/_dts/theme-core/src/palette/persistenceReadSource.d.ts +118 -0
  77. package/dist/_dts/theme-core/src/palette/resolveSelection.d.ts +50 -0
  78. package/dist/_dts/theme-core/src/palette/selection.d.ts +72 -0
  79. package/dist/_dts/theme-core/src/palette/sitePalettePersistence.d.ts +34 -0
  80. package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +58 -0
  81. package/dist/_dts/theme-core/src/schema.d.ts +9 -0
  82. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +22 -22
  83. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  84. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +31 -9
  85. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +22 -16
  86. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +6 -5
  87. package/dist/_dts/theme-core/src/site-styles/themeParity.d.ts +21 -0
  88. package/dist/_dts/ui/src/palette/PaletteTokenEditor.d.ts +2 -1
  89. package/dist/cli/index.mjs +7798 -7449
  90. package/dist/client/{DiscountCodeDisclosure-ChVZwVtS.mjs → DiscountCodeDisclosure-Dit2aItR.mjs} +1 -1
  91. package/dist/client/{EventCombined.client-PZtXbH6R.mjs → EventCombined.client-BnREyCjf.mjs} +3 -3
  92. package/dist/client/{EventListing.client-C4AMTXec.mjs → EventListing.client-0uHld51x.mjs} +2 -2
  93. package/dist/client/{LeafletStaticMap-B0w8_i0u.mjs → LeafletStaticMap-DJcvSfmj.mjs} +1 -1
  94. package/dist/client/{MagicLinkForm-DF0ZGhIu.mjs → MagicLinkForm-EAsIktfw.mjs} +2 -2
  95. package/dist/client/{StepIndicator-PccQ89Ct.mjs → StepIndicator-CRR17tYI.mjs} +2 -2
  96. package/dist/client/{accordion-CTNWT1lk.mjs → accordion-B47HIuuH.mjs} +1 -1
  97. package/dist/client/{bookingForm-DYixwPqP.mjs → bookingForm-I1E-8F9P.mjs} +6 -6
  98. package/dist/client/{buttons-CySQwlFs.mjs → buttons-BbPn8OKA.mjs} +1 -1
  99. package/dist/client/{carousel-W75iYR0M.mjs → carousel-OlM7SyBs.mjs} +1 -1
  100. package/dist/client/{cart-Ca_DGWQq.mjs → cart-BKpG5jz6.mjs} +3 -3
  101. package/dist/client/{checkout-STgKTsNh.mjs → checkout-Dmmr6qoU.mjs} +3 -3
  102. package/dist/client/client.mjs +8699 -8320
  103. package/dist/client/{courseRegistration-DQI1cu1u.mjs → courseRegistration-CflZiqGk.mjs} +7 -7
  104. package/dist/client/{eventCalendar-BJrHpofg.mjs → eventCalendar-BvoLWcp-.mjs} +5 -5
  105. package/dist/client/{eventCombined-DPtqBHaH.mjs → eventCombined-DsrO8t_t.mjs} +2 -2
  106. package/dist/client/{eventDetails-Brt31CDo.mjs → eventDetails-C3hxgcJm.mjs} +3 -3
  107. package/dist/client/{eventListing-BrClHJOq.mjs → eventListing-C-hb237X.mjs} +2 -2
  108. package/dist/client/{eventRegistration-DxlNlVUC.mjs → eventRegistration-B0gyzDGi.mjs} +7 -7
  109. package/dist/client/{form-Vp5cGzDF.mjs → form-C_RUi6oJ.mjs} +2 -2
  110. package/dist/client/{headerSection-DL2xjRgW.mjs → headerSection-IKQiD2U0.mjs} +3 -3
  111. package/dist/client/hooks.mjs +4837 -4663
  112. package/dist/client/{locationMap-B0EjoXQS.mjs → locationMap-8ZBrMzRJ.mjs} +2 -2
  113. package/dist/client/{newsletterForm-BlV9VRlq.mjs → newsletterForm-CYk3ucwj.mjs} +2 -2
  114. package/dist/client/{pricing-DmRD7Tjx.mjs → pricing-B5GmvfIH.mjs} +1 -1
  115. package/dist/client/{productDetail-BLTQsY2f.mjs → productDetail-BjS2Dqzo.mjs} +3 -3
  116. package/dist/client/{productList-R8lsMpRs.mjs → productList-BOHvC8My.mjs} +3 -3
  117. package/dist/client/{propsDecoder-DgAshF92.mjs → propsDecoder-WS6UEJwZ.mjs} +7 -0
  118. package/dist/client/rendering/client.mjs +3607 -3281
  119. package/dist/client/rendering/islands.mjs +18 -18
  120. package/dist/client/rendering.mjs +8562 -8190
  121. package/dist/client/{shop-DWjyje1s.mjs → shop-CON03-wN.mjs} +6 -6
  122. package/dist/client/{shop-commerce-CSKCR87d.mjs → shop-commerce-DlqrFgH8.mjs} +5 -5
  123. package/dist/client/{shop-commerce-store-DxPnE-iN.mjs → shop-commerce-store-l74-Kne6.mjs} +1 -1
  124. package/dist/client/{shopShared-OOeAkFq7.mjs → shopShared-CQheEXSg.mjs} +2 -2
  125. package/dist/client/{useDiscountCodeUi-Bp6X7XgG.mjs → useDiscountCodeUi-v6OluyWl.mjs} +1 -1
  126. package/dist/client/{useEventFilters-B489x9TO.mjs → useEventFilters-BqSTcNOf.mjs} +3 -3
  127. package/dist/client/{usePolling-BKP66stL.mjs → usePolling-DMfADjIF.mjs} +2 -2
  128. package/dist/preview-next/before-render.mjs +10 -3
  129. package/dist/preview-next/client/runtime.mjs +4 -4
  130. package/dist/preview-next/middleware.mjs +10 -3
  131. package/dist/{previewAuthStore-ByPPZqmp.mjs → previewAuthStore-CfquDtTh.mjs} +10 -3
  132. package/dist/{sdk-runtime-C8whifOy.mjs → sdk-runtime-DWb08Xaz.mjs} +2 -2
  133. package/dist/{separator-CM2C5Axs.mjs → separator--6yjc914.mjs} +1 -1
  134. package/dist/server/components.mjs +9863 -9557
  135. package/dist/server/config-validation.mjs +4861 -4687
  136. package/dist/server/config.mjs +4861 -4687
  137. package/dist/server/data.mjs +4838 -4664
  138. package/dist/server/index.mjs +11 -4
  139. package/dist/server/next.mjs +8657 -8344
  140. package/dist/server/page-converter.mjs +4749 -4575
  141. package/dist/server/prebuild.mjs +1 -1
  142. package/dist/server/rendering/server.mjs +9808 -9586
  143. package/dist/server/rendering.mjs +9872 -9566
  144. package/dist/server/routing.mjs +4967 -4704
  145. package/dist/server/server.mjs +4845 -4664
  146. package/dist/server/theme-bridge.mjs +207 -114
  147. package/dist/server/theme.mjs +92 -91
  148. package/dist/styles/index.css +20 -0
  149. 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,38 @@
1
+ import type { CuratedPaletteId, PaletteOverrides } from './curated';
2
+ import type { PaletteColors, PaletteMode } from './colors';
3
+ import type { PalettePersistenceReadResult, RuntimePaletteState } from './persistenceReadSource';
4
+ import type { PaletteCompatibilityState } from './paletteCompatibilityTransition';
5
+ import type { PaletteSelection } from './selection';
6
+ export type LegacyPaletteResponseProjection = Readonly<{
7
+ paletteVariantId: CuratedPaletteId | null;
8
+ paletteOverrides: PaletteOverrides | null;
9
+ }>;
10
+ type ResolvedPaletteForLegacyProjection = Readonly<{
11
+ selection: PaletteSelection;
12
+ colors: PaletteColors;
13
+ mode: PaletteMode;
14
+ }>;
15
+ /**
16
+ * Projects a resolved authoritative selection to the bounded legacy
17
+ * curated-plus-overrides wire shape. Site palettes retain their complete
18
+ * colours, using a stable curated palette in the same mode as the base.
19
+ */
20
+ export declare function projectResolvedPaletteForLegacyResponse(input: ResolvedPaletteForLegacyProjection & Readonly<{
21
+ preferredCuratedPaletteId?: CuratedPaletteId | null;
22
+ }>): LegacyPaletteResponseProjection;
23
+ /**
24
+ * One-way egress adapter for stale clients. It accepts canonical compatibility
25
+ * state only; its lossy curated-plus-overrides response is never a transition
26
+ * input.
27
+ */
28
+ export declare function projectPaletteCompatibilityStateForLegacyResponse(state: PaletteCompatibilityState, preferredCuratedPaletteId?: CuratedPaletteId | null): LegacyPaletteResponseProjection;
29
+ /**
30
+ * Projects runtime state without letting stale legacy columns override an
31
+ * explicit new authority. Unmigrated rows preserve their validated legacy
32
+ * identity so mixed-version clients do not receive an unnecessary rewrite.
33
+ */
34
+ export declare function projectRuntimePaletteStateForLegacyResponse(input: Readonly<{
35
+ runtimePaletteState: RuntimePaletteState | null;
36
+ persistenceRead: PalettePersistenceReadResult | null;
37
+ }>): LegacyPaletteResponseProjection;
38
+ 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,241 @@
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
+ declare const legacyPaletteRequestBaselineUpdateBrand: unique symbol;
79
+ /** A normalized legacy request snapshot, persisted only with a successful save. */
80
+ export type LegacyPaletteRequestBaselineUpdate = Readonly<{
81
+ paletteVariantId: CuratedPaletteId;
82
+ paletteOverrides: PaletteOverrides | null;
83
+ [legacyPaletteRequestBaselineUpdateBrand]: true;
84
+ }>;
85
+ export type LegacyPaletteSaveNormalizationError = Readonly<{
86
+ kind: 'missing-base-palette';
87
+ }>;
88
+ export type LegacyPaletteSaveNormalizationResult = Readonly<{
89
+ ok: true;
90
+ selection: LegacyPaletteSaveSelection;
91
+ }> | Readonly<{
92
+ ok: false;
93
+ error: LegacyPaletteSaveNormalizationError;
94
+ }>;
95
+ export type LegacyResolvedPaletteSelection = Readonly<{
96
+ kind: 'curated';
97
+ selection: Extract<PaletteSelection, {
98
+ kind: 'curated';
99
+ }>;
100
+ colors: PaletteColors;
101
+ mode: PaletteMode;
102
+ }> | Readonly<{
103
+ kind: 'site';
104
+ colors: PaletteColors;
105
+ mode: PaletteMode;
106
+ origin: Extract<SitePaletteOrigin, {
107
+ kind: 'onboarding' | 'legacy-customized';
108
+ }>;
109
+ }>;
110
+ export type PaletteCompatibilityStateError = Readonly<{
111
+ kind: 'invalid-authoritative-selection';
112
+ }> | Readonly<{
113
+ kind: 'invalid-legacy-evidence';
114
+ reason: 'unknown-curated-palette';
115
+ }> | Readonly<{
116
+ kind: 'unresolved-legacy-selection';
117
+ reason: Extract<LegacyPaletteClassification, {
118
+ kind: 'unresolved';
119
+ }>['reason'];
120
+ }> | Readonly<{
121
+ kind: 'defaulted-legacy-selection';
122
+ paletteId: CuratedPaletteId;
123
+ }>;
124
+ export type PaletteCompatibilityState = Readonly<{
125
+ kind: 'authoritative';
126
+ resolved: ResolvedPaletteSelection;
127
+ }> | Readonly<{
128
+ kind: 'legacy-unmigrated';
129
+ resolved: LegacyResolvedPaletteSelection;
130
+ }> | Readonly<{
131
+ kind: 'uninitialized';
132
+ }> | Readonly<{
133
+ kind: 'invalid';
134
+ error: PaletteCompatibilityStateError;
135
+ }>;
136
+ export type PaletteCompatibilityIntent = Readonly<{
137
+ kind: 'preserve';
138
+ }> | Readonly<{
139
+ kind: 'current-command';
140
+ command: TrustedPaletteCommand;
141
+ selectedSitePalette: SitePalette | null;
142
+ }> | Readonly<{
143
+ kind: 'legacy-save';
144
+ selection: LegacyPaletteSaveSelection;
145
+ }> | Readonly<{
146
+ kind: 'theme-palette-save';
147
+ themePalette: CompatibleThemePalette;
148
+ fallbackCuratedPaletteId: CuratedPaletteId | null;
149
+ }>;
150
+ export type PaletteCompatibilityTransitionError = Readonly<{
151
+ kind: 'invalid-state';
152
+ error: PaletteCompatibilityStateError;
153
+ }> | Readonly<{
154
+ kind: 'missing-base-palette';
155
+ }> | Readonly<{
156
+ kind: 'unknown-curated-palette';
157
+ paletteId: CuratedPaletteId;
158
+ }> | Readonly<{
159
+ kind: 'missing-selected-site-palette';
160
+ paletteId: Extract<PaletteSelection, {
161
+ kind: 'site';
162
+ }>['paletteId'];
163
+ }> | Readonly<{
164
+ kind: 'selected-site-palette-mismatch';
165
+ expectedPaletteId: Extract<PaletteSelection, {
166
+ kind: 'site';
167
+ }>['paletteId'];
168
+ receivedPaletteId: SitePalette['id'];
169
+ }> | Readonly<{
170
+ kind: 'site-update-not-authoritative';
171
+ }> | Readonly<{
172
+ kind: 'site-update-palette-mismatch';
173
+ expectedPaletteId: SitePalette['id'];
174
+ receivedPaletteId: SitePalette['id'];
175
+ }> | Readonly<{
176
+ kind: 'stale-site-palette-update';
177
+ paletteId: SitePalette['id'];
178
+ }>;
179
+ /**
180
+ * This is deliberately a correlated ADT rather than a command/target product.
181
+ * Every variant carries only the target evidence that its action can legally use.
182
+ */
183
+ export type PaletteCompatibilityTransitionPlan = Readonly<{
184
+ kind: 'preserve-curated';
185
+ command: Extract<TrustedPaletteCommand, {
186
+ kind: 'preserve';
187
+ }>;
188
+ target: ResolvedCuratedPaletteSelection;
189
+ }> | Readonly<{
190
+ kind: 'preserve-existing-site';
191
+ command: Extract<TrustedPaletteCommand, {
192
+ kind: 'preserve';
193
+ }>;
194
+ target: ResolvedSitePaletteSelection;
195
+ }> | Readonly<{
196
+ kind: 'select-curated';
197
+ command: Extract<TrustedPaletteCommand, {
198
+ kind: 'select';
199
+ }>;
200
+ target: ResolvedCuratedPaletteSelection;
201
+ }> | Readonly<{
202
+ kind: 'select-existing-site';
203
+ command: Extract<TrustedPaletteCommand, {
204
+ kind: 'select';
205
+ }>;
206
+ target: ResolvedSitePaletteSelection;
207
+ }> | Readonly<{
208
+ kind: 'create-site';
209
+ command: Extract<TrustedPaletteCommand, {
210
+ kind: 'create-site';
211
+ }>;
212
+ target: MaterializedSitePaletteTarget;
213
+ }> | Readonly<{
214
+ kind: 'update-existing-site';
215
+ command: Extract<TrustedPaletteCommand, {
216
+ kind: 'update-site';
217
+ }>;
218
+ target: ResolvedSitePaletteSelection;
219
+ }>;
220
+ export type PaletteCompatibilityTransitionResult = Readonly<{
221
+ ok: true;
222
+ plan: PaletteCompatibilityTransitionPlan;
223
+ }> | Readonly<{
224
+ ok: false;
225
+ error: PaletteCompatibilityTransitionError;
226
+ }>;
227
+ export declare function paletteCompatibilityStateFromLegacyClassification(classification: LegacyPaletteClassification): PaletteCompatibilityState;
228
+ /**
229
+ * Applies independent PATCH operations at the legacy ingress boundary. A
230
+ * fallback supplies omitted fields only for explicitly uninitialized creation;
231
+ * an explicit variant clear always selects the caller-supplied fallback.
232
+ */
233
+ export declare function normalizeLegacyPaletteSavePatch(input: Readonly<{
234
+ patch: LegacyPaletteSavePatch;
235
+ baseline: LegacyPaletteRequestBaseline;
236
+ fallbackCuratedPaletteId: CuratedPaletteId | null;
237
+ }>): LegacyPaletteSaveNormalizationResult;
238
+ /** Separates a legacy request-baseline write from the palette command ADT. */
239
+ export declare function legacyPaletteRequestBaselineUpdateFromSelection(selection: LegacyPaletteSaveSelection): LegacyPaletteRequestBaselineUpdate;
240
+ export declare function planPaletteTransition(state: PaletteCompatibilityState, intent: PaletteCompatibilityIntent): PaletteCompatibilityTransitionResult;
241
+ 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;