/** * Copyright (c) 2018-2025 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose */ import { Color } from '../mol-util/color/index.js'; import { Location } from '../mol-model/location.js'; import { ColorType, ColorTypeDirect, ColorTypeGrid, ColorTypeLocation } from '../mol-geo/geometry/color-data.js'; import { ParamDefinition as PD } from '../mol-util/param-definition.js'; import { ThemeDataContext, ThemeRegistry, ThemeProvider } from './theme.js'; import { ScaleLegend, TableLegend } from '../mol-util/legend.js'; import type { Texture, TextureFilter } from '../mol-gl/webgl/texture.js'; import { Vec3, Vec4 } from '../mol-math/linear-algebra.js'; import { ColorListEntry } from '../mol-util/color/color.js'; export type LocationColor = (location: Location, isSecondary: boolean) => Color; export interface ColorVolume { colors: Texture; dimension: Vec3; transform: Vec4; } export { ColorTheme }; type ColorThemeShared

= { readonly factory: ColorTheme.Factory; readonly props: Readonly>; /** * if palette is defined, 24bit RGB color value normalized to interval [0, 1] * is used as index to the colors */ readonly palette?: Readonly; readonly preferSmoothing?: boolean; readonly contextHash?: number; readonly description?: string; readonly legend?: Readonly; }; type ColorThemeLocation

= { readonly granularity: ColorTypeLocation; readonly color: LocationColor; } & ColorThemeShared; type ColorThemeGrid

= { readonly granularity: ColorTypeGrid; readonly grid: ColorVolume; } & ColorThemeShared; type ColorThemeDirect

= { readonly granularity: ColorTypeDirect; } & ColorThemeShared; type ColorTheme

= G extends ColorTypeLocation ? ColorThemeLocation

: G extends ColorTypeGrid ? ColorThemeGrid

: G extends ColorTypeDirect ? ColorThemeDirect

: never; declare namespace ColorTheme { export const Category: { Atom: string; Chain: string; Residue: string; Symmetry: string; Validation: string; Misc: string; }; export interface Palette { colors: Color[]; filter?: TextureFilter; domain?: [number, number]; defaultColor?: Color; } export function Palette(list: ColorListEntry[], kind: 'set' | 'interpolate', domain?: [number, number], defaultColor?: Color): Palette; export const PaletteScale: number; export type Props = { [k: string]: any; }; export type Factory

= (ctx: ThemeDataContext, props: PD.Values

) => ColorTheme; export const EmptyFactory: () => ColorThemeLocation<{}>; export const Empty: ColorTheme<{}>; export function areEqual(themeA: ColorTheme, themeB: ColorTheme): boolean; export interface Provider

extends ThemeProvider, P, Id, G> { } export const EmptyProvider: Provider<{}>; export type Registry = ThemeRegistry>; export function createRegistry(): ThemeRegistry | ColorThemeDirect<{}> | ColorThemeGrid<{}>>; export const BuiltIn: { 'atom-id': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "atom-id", ColorType>; 'carbohydrate-symbol': Provider<{}, "carbohydrate-symbol", ColorType>; cartoon: Provider<{ mainchain: PD.Mapped, "uniform"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; asymId: "label" | "auth"; }>, "chain-id"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "entity-id"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "entity-source"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "model-index"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "structure-index"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "trajectory-index"> | PD.NamedParams, "default"> | PD.NamedParams, "custom">; }>, "molecule-type"> | PD.NamedParams, "default"> | PD.NamedParams, "custom">; }>, "secondary-structure">>; sidechain: PD.Mapped, "uniform"> | PD.NamedParams, "occupancy"> | PD.NamedParams, "element-symbol"> | PD.NamedParams, "uniform"> | PD.NamedParams, "chain-id"> | PD.NamedParams, "operator-name"> | PD.NamedParams, "entity-id"> | PD.NamedParams, "entity-source"> | PD.NamedParams, "model-index"> | PD.NamedParams, "structure-index"> | PD.NamedParams, "unit-index"> | PD.NamedParams, "trajectory-index">; saturation: number; lightness: number; colors: PD.NamedParams, "default"> | PD.NamedParams, "custom">; }>, "element-symbol"> | PD.NamedParams, "uncertainty"> | PD.NamedParams, "hydrophobicity"> | PD.NamedParams, "default"> | PD.NamedParams, "custom">; }>, "residue-name"> | PD.NamedParams, "sequence-id"> | PD.NamedParams, "partial-charge">>; }, "cartoon", ColorType>; 'chain-id': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; asymId: PD.Select<"label" | "auth">; }, "chain-id", ColorType>; 'element-index': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "element-index", ColorType>; 'element-symbol': Provider<{ carbonColor: PD.Mapped, "element-symbol"> | PD.NamedParams, "uniform"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; asymId: "label" | "auth"; }>, "chain-id"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "operator-name"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "entity-id"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "entity-source"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "model-index"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "structure-index"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "unit-index"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "trajectory-index">>; saturation: PD.Numeric; lightness: PD.Numeric; colors: PD.Mapped, "default"> | PD.NamedParams, "custom">>; }, "element-symbol", ColorType>; 'entity-id': Provider<{ overrideWater: PD.BooleanParam; waterColor: PD.Color; palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "entity-id", ColorType>; 'entity-source': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "entity-source", ColorType>; 'external-structure': Provider<{ structure: PD.ValueRef; style: PD.Mapped, "generate"> | PD.NamedParams, "colors">; asymId: "label" | "auth"; }>, "chain-id"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "entity-id"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "entity-source"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "model-index"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "structure-index"> | PD.NamedParams, "default"> | PD.NamedParams, "custom">; }>, "molecule-type">>; defaultColor: PD.Color; maxDistance: PD.Numeric; approxMaxDistance: PD.Numeric; normalOffset: PD.Numeric; backboneOnly: PD.BooleanParam; }, "external-structure", ColorType>; 'external-volume': Provider<{ volume: PD.ValueRef; coloring: PD.Mapped | PD.NamedParams, "auto">; list: { kind: "interpolate" | "set"; colors: ColorListEntry[]; }; }>, "absolute-value"> | PD.NamedParams | PD.NamedParams, "auto">; list: { kind: "interpolate" | "set"; colors: ColorListEntry[]; }; }>, "relative-value">>; defaultColor: PD.Color; normalOffset: PD.Numeric; usePalette: PD.BooleanParam; }, "external-volume", ColorType>; 'formal-charge': Provider<{ domain: PD.Interval; list: PD.ColorList; }, "formal-charge", ColorType>; hydrophobicity: Provider<{ list: PD.ColorList; scale: PD.Select<"DGwif" | "DGwoct" | "Oct-IF">; }, "hydrophobicity", ColorType>; illustrative: Provider<{ style: PD.Mapped, "uniform"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; asymId: "label" | "auth"; }>, "chain-id"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "entity-id"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "entity-source"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "model-index"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "structure-index"> | PD.NamedParams, "generate"> | PD.NamedParams, "colors">; }>, "trajectory-index"> | PD.NamedParams, "default"> | PD.NamedParams, "custom">; }>, "molecule-type">>; carbonLightness: PD.Numeric; }, "illustrative", ColorType>; 'model-index': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "model-index", ColorType>; 'molecule-type': Provider<{ saturation: PD.Numeric; lightness: PD.Numeric; colors: PD.Mapped, "default"> | PD.NamedParams, "custom">>; }, "molecule-type", ColorType>; occupancy: Provider<{ domain: PD.Interval; list: PD.ColorList; }, "occupancy", ColorType>; 'operator-hkl': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "operator-hkl", ColorType>; 'operator-name': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "operator-name", ColorType>; 'partial-charge': Provider<{ domain: PD.Interval; list: PD.ColorList; }, "partial-charge", ColorType>; 'polymer-id': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "polymer-id", ColorType>; 'polymer-index': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "polymer-index", ColorType>; 'residue-charge': Provider<{ method: PD.Mapped, "default"> | PD.NamedParams, "custom">; }>, "by-name">>; }, "residue-charge", ColorType>; 'residue-name': Provider<{ saturation: PD.Numeric; lightness: PD.Numeric; colors: PD.Mapped, "default"> | PD.NamedParams, "custom">>; }, "residue-name", ColorType>; 'secondary-structure': Provider<{ saturation: PD.Numeric; lightness: PD.Numeric; colors: PD.Mapped, "default"> | PD.NamedParams, "custom">>; }, "secondary-structure", ColorType>; 'sequence-id': Provider<{ list: PD.ColorList; }, "sequence-id", ColorType>; 'shape-group': Provider<{}, "shape-group", ColorType>; 'structure-index': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "structure-index", ColorType>; 'trajectory-index': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "trajectory-index", ColorType>; uncertainty: Provider<{ domain: PD.Interval; list: PD.ColorList; }, "uncertainty", ColorType>; 'unit-index': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "unit-index", ColorType>; uniform: Provider<{ value: PD.Color; saturation: PD.Numeric; lightness: PD.Numeric; }, "uniform", ColorType>; 'volume-instance': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "volume-instance", ColorType>; 'volume-segment': Provider<{ palette: PD.Mapped, "generate"> | PD.NamedParams, "colors">>; }, "volume-segment", ColorType>; 'volume-value': Provider<{ colorList: PD.ColorList; domain: PD.Mapped | PD.NamedParams, "auto">>; isRelative: PD.BooleanParam; defaultColor: PD.Color; }, "volume-value", ColorType>; }; type _BuiltIn = typeof BuiltIn; export type BuiltIn = keyof _BuiltIn; export type ParamValues> = C extends ColorTheme.Provider ? PD.Values

: never; export type BuiltInParams = Partial>; export {}; } export declare function ColorThemeProvider

(p: ColorTheme.Provider): ColorTheme.Provider;