@riverbankcms/sdk 0.102.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.
- package/README.md +10 -2
- package/dist/{PreviewEditorSidebar-BKkhhkJk.mjs → PreviewEditorSidebar-ywqcYjTB.mjs} +217 -131
- package/dist/{PreviewEditorUI-DIvTqcqI.mjs → PreviewEditorUI-DApUNF6g.mjs} +3 -3
- package/dist/{PreviewQueryProvider-ZF6TXq5Q.mjs → PreviewQueryProvider-CStABBUh.mjs} +1 -1
- package/dist/{SdkPreviewModeRuntime-CA2k7Z_T.mjs → SdkPreviewModeRuntime-DmHCcIMO.mjs} +1738 -815
- package/dist/{SiteChromeCustomizeContext-Bh9-DtMQ.mjs → SiteChromeCustomizeContext-BV9GU-3C.mjs} +3517 -2524
- package/dist/_dts/ai/src/contracts/proposals.d.ts +298 -298
- package/dist/_dts/api/src/contentRuntime.d.ts +6 -3
- package/dist/_dts/api/src/endpoints.d.ts +10 -3
- package/dist/_dts/api/src/index.d.ts +2 -2
- package/dist/_dts/api/src/navigation/contracts.d.ts +6 -6
- package/dist/_dts/api/src/siteBanner.d.ts +2 -2
- package/dist/_dts/api/src/siteIcons.d.ts +39 -43
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -3
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +36 -7
- package/dist/_dts/block-form/src/widgets/SliderField/SliderField.d.ts +3 -3
- package/dist/_dts/block-form/src/widgets/SliderField/sliderValue.d.ts +36 -0
- package/dist/_dts/block-form/src/widgets/utils/readNumericUiConfig.d.ts +3 -0
- package/dist/_dts/blocks/src/PageRenderer.d.ts +6 -1
- package/dist/_dts/blocks/src/bindings/index.d.ts +2 -2
- package/dist/_dts/blocks/src/index.d.ts +2 -2
- package/dist/_dts/blocks/src/server.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +7 -7
- package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +14 -14
- package/dist/_dts/blocks/src/system/blocks/feature-card-icons.d.ts +29 -29
- package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +1 -0
- package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +8 -5
- package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +362 -227
- package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +1 -1
- package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
- package/dist/_dts/blocks/src/system/customize/facets.d.ts +2 -2
- package/dist/_dts/blocks/src/system/icons/generatedAssets.d.ts +28 -0
- package/dist/_dts/blocks/src/system/icons/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/icons/value.d.ts +3 -6
- package/dist/_dts/blocks/src/system/inlineText.d.ts +2 -2
- package/dist/_dts/blocks/src/system/manifest/schema.d.ts +417 -177
- package/dist/_dts/blocks/src/system/node/schema.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/feature-card-icon.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +7 -7
- package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -1
- package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +2 -0
- package/dist/_dts/content-editor/src/ui/stores/generatedIconAssetsStore.d.ts +9 -0
- package/dist/_dts/content-model/src/content-types/schema.d.ts +8 -8
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +344 -0
- package/dist/_dts/db/src/schemas/forms.d.ts +15 -15
- package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +7 -0
- package/dist/_dts/editor-blocks/src/BlockForm.d.ts +2 -1
- package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +4 -4
- package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +2 -3
- package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +4 -4
- package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +4 -4
- package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +3 -3
- package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -3
- package/dist/_dts/editor-blocks/src/block-editor/blockHeaderActionPlan.d.ts +1 -5
- package/dist/_dts/editor-blocks/src/block-editor/featureCardIconActions.d.ts +25 -19
- package/dist/_dts/editor-blocks/src/block-editor/generatedIconApplyCoordination.d.ts +32 -0
- package/dist/_dts/editor-blocks/src/widgets/icon-picker/GeneratedIconLibraryContext.d.ts +28 -0
- package/dist/_dts/editor-blocks/src/widgets/icon-picker/index.d.ts +2 -0
- package/dist/_dts/editor-blocks/src/widgets/icon-picker/loaders.d.ts +7 -0
- package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/CustomizeBackgroundControlRows.d.ts +15 -0
- package/dist/_dts/preview-next/src/client/preview/CustomizeColorTokenPicker.d.ts +27 -0
- package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +3 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +4 -3
- package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +4 -3
- package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +4 -3
- package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +13 -6
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +5 -4
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +44 -18
- package/dist/_dts/preview-next/src/client/preview/sidebarTabPreference.d.ts +1 -1
- package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +16 -1
- package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +3 -2
- package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +4 -5
- package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +22 -1
- package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +12 -4
- package/dist/_dts/sdk/src/client/management/types.d.ts +3 -0
- package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
- package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
- package/dist/_dts/sdk/src/contracts/page.d.ts +2 -0
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +0 -1
- package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +10 -10
- package/dist/_dts/sdk/src/next/revalidate.d.ts +14 -1
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +9 -6
- package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -1
- package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -2
- package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +3 -4
- package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +1 -0
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/site-commands/src/commands.d.ts +19 -19
- package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
- package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +3 -3
- package/dist/_dts/theme-core/src/buttons/types.d.ts +7 -7
- package/dist/_dts/theme-core/src/cards/types.d.ts +6 -6
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/inputs/types.d.ts +4 -4
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +156 -150
- package/dist/_dts/theme-core/src/navigation/types.d.ts +8 -6
- package/dist/_dts/theme-core/src/palette/colors.d.ts +84 -0
- package/dist/_dts/theme-core/src/palette/{variants → curated}/brand-led.d.ts +12 -24
- package/dist/_dts/theme-core/src/palette/{variants → curated}/high-contrast.d.ts +9 -18
- package/dist/_dts/theme-core/src/palette/{variants → curated}/index.d.ts +67 -119
- package/dist/_dts/theme-core/src/palette/{variants → curated}/soft-natural.d.ts +12 -24
- package/dist/_dts/theme-core/src/palette/{variants → curated}/types.d.ts +52 -62
- package/dist/_dts/theme-core/src/palette/{variants → curated}/warm-dark.d.ts +6 -12
- package/dist/_dts/theme-core/src/palette/{variants → curated}/warm-neutral.d.ts +12 -24
- package/dist/_dts/theme-core/src/palette/editorState.d.ts +45 -0
- package/dist/_dts/theme-core/src/palette/index.d.ts +25 -14
- package/dist/_dts/theme-core/src/palette/legacyRuntimeProjection.d.ts +38 -0
- package/dist/_dts/theme-core/src/palette/legacySelection.d.ts +34 -0
- package/dist/_dts/theme-core/src/palette/libraryModel.d.ts +58 -0
- package/dist/_dts/theme-core/src/palette/paletteCompatibilityTransition.d.ts +241 -0
- package/dist/_dts/theme-core/src/palette/persistenceReadSource.d.ts +118 -0
- package/dist/_dts/theme-core/src/palette/resolveSelection.d.ts +50 -0
- package/dist/_dts/theme-core/src/palette/selection.d.ts +72 -0
- package/dist/_dts/theme-core/src/palette/sitePalettePersistence.d.ts +34 -0
- package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +58 -0
- package/dist/_dts/theme-core/src/schema.d.ts +208 -169
- package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
- package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
- package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +22 -22
- package/dist/_dts/theme-core/src/site-styles/designState.d.ts +24 -24
- package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +2 -2
- package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -0
- package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +35 -11
- package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +48 -17
- package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +77 -0
- package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +45 -0
- package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/themeParity.d.ts +21 -0
- package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
- package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +3 -3
- package/dist/_dts/ui/src/badge.d.ts +1 -1
- package/dist/_dts/ui/src/button.d.ts +1 -1
- package/dist/_dts/ui/src/card.d.ts +1 -1
- package/dist/_dts/ui/src/palette/PaletteTokenEditor.d.ts +2 -1
- package/dist/_dts/ui/src/toggle.d.ts +2 -2
- package/dist/cli/index.mjs +7815 -7445
- package/dist/cli/init-docs/content/workflow-isr-revalidation.md +9 -1
- package/dist/client/{DiscountCodeDisclosure-ChVZwVtS.mjs → DiscountCodeDisclosure-Dit2aItR.mjs} +1 -1
- package/dist/client/{EventCombined.client-PZtXbH6R.mjs → EventCombined.client-BnREyCjf.mjs} +3 -3
- package/dist/client/{EventListing.client-C4AMTXec.mjs → EventListing.client-0uHld51x.mjs} +2 -2
- package/dist/client/{LeafletStaticMap-B0w8_i0u.mjs → LeafletStaticMap-DJcvSfmj.mjs} +1 -1
- package/dist/client/{MagicLinkForm-DF0ZGhIu.mjs → MagicLinkForm-EAsIktfw.mjs} +2 -2
- package/dist/client/{StepIndicator-PccQ89Ct.mjs → StepIndicator-CRR17tYI.mjs} +2 -2
- package/dist/client/{accordion-CTNWT1lk.mjs → accordion-B47HIuuH.mjs} +1 -1
- package/dist/client/{bookingForm-DYixwPqP.mjs → bookingForm-I1E-8F9P.mjs} +6 -6
- package/dist/client/{buttons-CySQwlFs.mjs → buttons-BbPn8OKA.mjs} +1 -1
- package/dist/client/{carousel-W75iYR0M.mjs → carousel-OlM7SyBs.mjs} +1 -1
- package/dist/client/{cart-Ca_DGWQq.mjs → cart-BKpG5jz6.mjs} +3 -3
- package/dist/client/{checkout-STgKTsNh.mjs → checkout-Dmmr6qoU.mjs} +3 -3
- package/dist/client/client.mjs +9000 -8353
- package/dist/client/{courseRegistration-DQI1cu1u.mjs → courseRegistration-CflZiqGk.mjs} +7 -7
- package/dist/client/{eventCalendar-BJrHpofg.mjs → eventCalendar-BvoLWcp-.mjs} +5 -5
- package/dist/client/{eventCombined-DPtqBHaH.mjs → eventCombined-DsrO8t_t.mjs} +2 -2
- package/dist/client/{eventDetails-Brt31CDo.mjs → eventDetails-C3hxgcJm.mjs} +3 -3
- package/dist/client/{eventListing-BrClHJOq.mjs → eventListing-C-hb237X.mjs} +2 -2
- package/dist/client/{eventRegistration-DxlNlVUC.mjs → eventRegistration-B0gyzDGi.mjs} +7 -7
- package/dist/client/{form-Vp5cGzDF.mjs → form-C_RUi6oJ.mjs} +2 -2
- package/dist/client/{headerSection-DL2xjRgW.mjs → headerSection-IKQiD2U0.mjs} +3 -3
- package/dist/client/hooks.mjs +4792 -4606
- package/dist/client/{locationMap-B0EjoXQS.mjs → locationMap-8ZBrMzRJ.mjs} +2 -2
- package/dist/client/{newsletterForm-BlV9VRlq.mjs → newsletterForm-CYk3ucwj.mjs} +2 -2
- package/dist/client/{pricing-DmRD7Tjx.mjs → pricing-B5GmvfIH.mjs} +1 -1
- package/dist/client/{productDetail-BLTQsY2f.mjs → productDetail-BjS2Dqzo.mjs} +3 -3
- package/dist/client/{productList-R8lsMpRs.mjs → productList-BOHvC8My.mjs} +3 -3
- package/dist/client/{propsDecoder-DgAshF92.mjs → propsDecoder-WS6UEJwZ.mjs} +7 -0
- package/dist/client/rendering/client.mjs +3565 -3218
- package/dist/client/rendering/islands.mjs +18 -18
- package/dist/client/rendering.mjs +8919 -8279
- package/dist/client/{shop-DWjyje1s.mjs → shop-CON03-wN.mjs} +6 -6
- package/dist/client/{shop-commerce-CSKCR87d.mjs → shop-commerce-DlqrFgH8.mjs} +5 -5
- package/dist/client/{shop-commerce-store-DxPnE-iN.mjs → shop-commerce-store-l74-Kne6.mjs} +1 -1
- package/dist/client/{shopShared-OOeAkFq7.mjs → shopShared-CQheEXSg.mjs} +2 -2
- package/dist/client/{useDiscountCodeUi-Bp6X7XgG.mjs → useDiscountCodeUi-v6OluyWl.mjs} +1 -1
- package/dist/client/{useEventFilters-B489x9TO.mjs → useEventFilters-BqSTcNOf.mjs} +3 -3
- package/dist/client/{usePolling-BKP66stL.mjs → usePolling-DMfADjIF.mjs} +2 -2
- package/dist/preview-next/before-render.mjs +10 -3
- package/dist/preview-next/client/runtime.mjs +4 -4
- package/dist/preview-next/middleware.mjs +10 -3
- package/dist/{previewAuthStore-ByPPZqmp.mjs → previewAuthStore-CfquDtTh.mjs} +10 -3
- package/dist/{sdk-runtime-K8Oqj97H.mjs → sdk-runtime-DWb08Xaz.mjs} +2 -2
- package/dist/{separator-CRoP34pT.mjs → separator--6yjc914.mjs} +1 -1
- package/dist/server/components.mjs +10183 -9621
- package/dist/server/config-validation.mjs +4871 -4686
- package/dist/server/config.mjs +4871 -4686
- package/dist/server/data.mjs +4848 -4663
- package/dist/server/index.mjs +11 -4
- package/dist/server/next/revalidate.mjs +31 -1
- package/dist/server/next.mjs +9894 -9322
- package/dist/server/page-converter.mjs +4758 -4573
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +10099 -9619
- package/dist/server/rendering.mjs +10195 -9631
- package/dist/server/routing.mjs +4985 -4701
- package/dist/server/server.mjs +4823 -4629
- package/dist/server/theme-bridge.mjs +360 -146
- package/dist/server/theme.mjs +94 -91
- package/dist/styles/index.css +143 -30
- package/package.json +1 -1
|
@@ -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;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { PaletteColors, PaletteMode } from './colors';
|
|
2
|
+
import { type CuratedPalette, type CuratedPaletteId } from './curated';
|
|
3
|
+
import type { PaletteSelection, SitePalette, SitePaletteId } from './selection';
|
|
4
|
+
declare const resolvedPaletteSelectionBrand: unique symbol;
|
|
5
|
+
export type ResolvedCuratedPaletteSelection = Readonly<{
|
|
6
|
+
kind: 'curated';
|
|
7
|
+
selection: Extract<PaletteSelection, {
|
|
8
|
+
kind: 'curated';
|
|
9
|
+
}>;
|
|
10
|
+
colors: PaletteColors;
|
|
11
|
+
mode: PaletteMode;
|
|
12
|
+
[resolvedPaletteSelectionBrand]: true;
|
|
13
|
+
}>;
|
|
14
|
+
export type ResolvedSitePaletteSelection = Readonly<{
|
|
15
|
+
kind: 'site';
|
|
16
|
+
selection: Extract<PaletteSelection, {
|
|
17
|
+
kind: 'site';
|
|
18
|
+
}>;
|
|
19
|
+
colors: PaletteColors;
|
|
20
|
+
mode: PaletteMode;
|
|
21
|
+
version: SitePalette['version'];
|
|
22
|
+
[resolvedPaletteSelectionBrand]: true;
|
|
23
|
+
}>;
|
|
24
|
+
export type ResolvedPaletteSelection = ResolvedCuratedPaletteSelection | ResolvedSitePaletteSelection;
|
|
25
|
+
export type PaletteSelectionResolutionError = Readonly<{
|
|
26
|
+
kind: 'curated-palette-not-found';
|
|
27
|
+
paletteId: CuratedPaletteId;
|
|
28
|
+
}> | Readonly<{
|
|
29
|
+
kind: 'site-palette-not-found';
|
|
30
|
+
paletteId: SitePaletteId;
|
|
31
|
+
}>;
|
|
32
|
+
export type PaletteSelectionResolution = Readonly<{
|
|
33
|
+
ok: true;
|
|
34
|
+
resolved: ResolvedPaletteSelection;
|
|
35
|
+
}> | Readonly<{
|
|
36
|
+
ok: false;
|
|
37
|
+
error: PaletteSelectionResolutionError;
|
|
38
|
+
}>;
|
|
39
|
+
/** Core-owned constructors keep the resolved marker out of application code. */
|
|
40
|
+
export declare function resolvedCuratedPaletteSelection(palette: CuratedPalette): ResolvedCuratedPaletteSelection;
|
|
41
|
+
export declare function resolvedSitePaletteSelection(palette: SitePalette): ResolvedSitePaletteSelection;
|
|
42
|
+
/** Resolves a persisted selection against the records that actually own it. */
|
|
43
|
+
export declare function resolvePaletteSelection(input: Readonly<{
|
|
44
|
+
selection: PaletteSelection;
|
|
45
|
+
curatedPalettes: readonly CuratedPalette[];
|
|
46
|
+
sitePalettes: readonly SitePalette[];
|
|
47
|
+
}>): PaletteSelectionResolution;
|
|
48
|
+
/** Resolves catalog authority without asking callers to manufacture a brand. */
|
|
49
|
+
export declare function resolveCuratedPaletteSelection(paletteId: CuratedPaletteId): PaletteSelectionResolution;
|
|
50
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type CuratedPaletteId } from './curated/types';
|
|
3
|
+
import { type PaletteColors, type PaletteMode } from './colors';
|
|
4
|
+
export type SitePaletteId = string & {
|
|
5
|
+
readonly __brand: 'SitePaletteId';
|
|
6
|
+
};
|
|
7
|
+
export type SitePaletteVersion = number & {
|
|
8
|
+
readonly __brand: 'SitePaletteVersion';
|
|
9
|
+
};
|
|
10
|
+
export declare const sitePaletteIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<SitePaletteId, string>>;
|
|
11
|
+
export declare const sitePaletteVersionSchema: z.ZodPipe<z.ZodNumber, z.ZodTransform<SitePaletteVersion, number>>;
|
|
12
|
+
export declare function parseSitePaletteId(value: unknown): SitePaletteId | null;
|
|
13
|
+
export declare function parseSitePaletteVersion(value: unknown): SitePaletteVersion | null;
|
|
14
|
+
export type PaletteSelection = Readonly<{
|
|
15
|
+
kind: 'curated';
|
|
16
|
+
paletteId: CuratedPaletteId;
|
|
17
|
+
}> | Readonly<{
|
|
18
|
+
kind: 'site';
|
|
19
|
+
paletteId: SitePaletteId;
|
|
20
|
+
}>;
|
|
21
|
+
export declare const paletteSelectionSchema: z.ZodType<PaletteSelection>;
|
|
22
|
+
export type SitePaletteOrigin = Readonly<{
|
|
23
|
+
kind: 'onboarding';
|
|
24
|
+
sourceKey: string | null;
|
|
25
|
+
}> | Readonly<{
|
|
26
|
+
kind: 'curated-fork';
|
|
27
|
+
sourcePaletteId: CuratedPaletteId;
|
|
28
|
+
}> | Readonly<{
|
|
29
|
+
kind: 'manual';
|
|
30
|
+
}> | Readonly<{
|
|
31
|
+
kind: 'legacy-customized';
|
|
32
|
+
sourceKey: string | null;
|
|
33
|
+
}>;
|
|
34
|
+
export declare const sitePaletteOriginSchema: z.ZodType<SitePaletteOrigin>;
|
|
35
|
+
export type EditorSitePaletteOrigin = Extract<SitePaletteOrigin, {
|
|
36
|
+
kind: 'curated-fork';
|
|
37
|
+
}> | Extract<SitePaletteOrigin, {
|
|
38
|
+
kind: 'manual';
|
|
39
|
+
}>;
|
|
40
|
+
export type SitePalette = Readonly<{
|
|
41
|
+
id: SitePaletteId;
|
|
42
|
+
colors: PaletteColors;
|
|
43
|
+
mode: PaletteMode;
|
|
44
|
+
origin: SitePaletteOrigin;
|
|
45
|
+
version: SitePaletteVersion;
|
|
46
|
+
}>;
|
|
47
|
+
export declare const sitePaletteSchema: z.ZodType<SitePalette>;
|
|
48
|
+
export type PaletteCommand = Readonly<{
|
|
49
|
+
kind: 'preserve';
|
|
50
|
+
}> | Readonly<{
|
|
51
|
+
kind: 'select';
|
|
52
|
+
selection: PaletteSelection;
|
|
53
|
+
}> | Readonly<{
|
|
54
|
+
kind: 'create-site';
|
|
55
|
+
colors: PaletteColors;
|
|
56
|
+
mode: PaletteMode;
|
|
57
|
+
origin: EditorSitePaletteOrigin;
|
|
58
|
+
}> | Readonly<{
|
|
59
|
+
kind: 'update-site';
|
|
60
|
+
paletteId: SitePaletteId;
|
|
61
|
+
expectedVersion: SitePaletteVersion;
|
|
62
|
+
colors: PaletteColors;
|
|
63
|
+
mode: PaletteMode;
|
|
64
|
+
}>;
|
|
65
|
+
/** Server-only command shape for provisioning and legacy write-through. */
|
|
66
|
+
export type TrustedPaletteCommand = PaletteCommand | Readonly<{
|
|
67
|
+
kind: 'create-site';
|
|
68
|
+
colors: PaletteColors;
|
|
69
|
+
mode: PaletteMode;
|
|
70
|
+
origin: SitePaletteOrigin;
|
|
71
|
+
}>;
|
|
72
|
+
export declare const paletteCommandSchema: z.ZodType<PaletteCommand>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type SitePalette } from './selection';
|
|
2
|
+
/** Structural persistence shape shared by every site-palette reader. */
|
|
3
|
+
export type SitePalettePersistenceRow = Readonly<{
|
|
4
|
+
id: string;
|
|
5
|
+
colors: unknown;
|
|
6
|
+
mode: string;
|
|
7
|
+
originKind: string;
|
|
8
|
+
originReference: string | null;
|
|
9
|
+
version: number;
|
|
10
|
+
}>;
|
|
11
|
+
export type SitePaletteParseError = Readonly<{
|
|
12
|
+
kind: 'invalid-site-palette-id';
|
|
13
|
+
value: string;
|
|
14
|
+
}> | Readonly<{
|
|
15
|
+
kind: 'invalid-site-palette-colors';
|
|
16
|
+
}> | Readonly<{
|
|
17
|
+
kind: 'invalid-site-palette-mode';
|
|
18
|
+
value: string;
|
|
19
|
+
}> | Readonly<{
|
|
20
|
+
kind: 'invalid-site-palette-origin';
|
|
21
|
+
originKind: string;
|
|
22
|
+
originReference: string | null;
|
|
23
|
+
}> | Readonly<{
|
|
24
|
+
kind: 'invalid-site-palette-version';
|
|
25
|
+
value: number;
|
|
26
|
+
}>;
|
|
27
|
+
export type SitePaletteParseResult = Readonly<{
|
|
28
|
+
ok: true;
|
|
29
|
+
palette: SitePalette;
|
|
30
|
+
}> | Readonly<{
|
|
31
|
+
ok: false;
|
|
32
|
+
error: SitePaletteParseError;
|
|
33
|
+
}>;
|
|
34
|
+
export declare function parseSitePalettePersistenceRow(row: SitePalettePersistenceRow): SitePaletteParseResult;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type PaletteTokenName } from '../tokens/themeColorTokens';
|
|
2
|
+
import { type PaletteColors, type PaletteMode } from './colors';
|
|
3
|
+
import type { PaletteOverrides } from './curated';
|
|
4
|
+
/**
|
|
5
|
+
* The persisted Theme palette boundary. It deliberately stays narrower than
|
|
6
|
+
* the full Theme schema so consumers do not need to depend on another package
|
|
7
|
+
* just to interpret old sparse palette entries.
|
|
8
|
+
*/
|
|
9
|
+
export type ThemePaletteCompatibilityInput = Readonly<{
|
|
10
|
+
palette?: Readonly<{
|
|
11
|
+
colors: readonly Readonly<{
|
|
12
|
+
name: string;
|
|
13
|
+
hex: string;
|
|
14
|
+
}>[];
|
|
15
|
+
meta?: Readonly<{
|
|
16
|
+
mode?: unknown;
|
|
17
|
+
}> | null;
|
|
18
|
+
}> | null;
|
|
19
|
+
}>;
|
|
20
|
+
export type ThemePaletteCompatibilityError = Readonly<{
|
|
21
|
+
kind: 'missing-palette';
|
|
22
|
+
}> | Readonly<{
|
|
23
|
+
kind: 'invalid-mode';
|
|
24
|
+
}> | Readonly<{
|
|
25
|
+
kind: 'unknown-role';
|
|
26
|
+
role: string;
|
|
27
|
+
}> | Readonly<{
|
|
28
|
+
kind: 'duplicate-role';
|
|
29
|
+
role: PaletteTokenName;
|
|
30
|
+
}> | Readonly<{
|
|
31
|
+
kind: 'invalid-color';
|
|
32
|
+
role: PaletteTokenName;
|
|
33
|
+
value: string;
|
|
34
|
+
}> | Readonly<{
|
|
35
|
+
kind: 'invalid-complete-palette';
|
|
36
|
+
}>;
|
|
37
|
+
export type CompatibleThemePalette = Readonly<{
|
|
38
|
+
kind: 'complete';
|
|
39
|
+
colors: PaletteColors;
|
|
40
|
+
mode: PaletteMode;
|
|
41
|
+
}> | Readonly<{
|
|
42
|
+
kind: 'partial';
|
|
43
|
+
overrides: PaletteOverrides;
|
|
44
|
+
mode: PaletteMode;
|
|
45
|
+
}>;
|
|
46
|
+
export type ParseCompatibleThemePaletteResult = Readonly<{
|
|
47
|
+
ok: true;
|
|
48
|
+
palette: CompatibleThemePalette;
|
|
49
|
+
}> | Readonly<{
|
|
50
|
+
ok: false;
|
|
51
|
+
error: ThemePaletteCompatibilityError;
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Parses both current complete Theme palettes and historical sparse palettes.
|
|
55
|
+
* Sparse entries remain sparse so callers can overlay them onto their own
|
|
56
|
+
* authoritative base without silently changing the persisted Theme shape.
|
|
57
|
+
*/
|
|
58
|
+
export declare function parseCompatibleThemePalette(theme: ThemePaletteCompatibilityInput): ParseCompatibleThemePaletteResult;
|