/**
 * Copyright (c) 2018-2026 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author David Sehnal <david.sehnal@gmail.com>
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
import { StructureElement } from '../../mol-model/structure.js';
import { Volume } from '../../mol-model/volume.js';
import { PluginContext } from '../../mol-plugin/context.js';
import { VolumeRepresentationRegistry } from '../../mol-repr/volume/registry.js';
import { StateTransformer } from '../../mol-state/index.js';
import { ColorTheme } from '../../mol-theme/color.js';
import { SizeTheme } from '../../mol-theme/size.js';
import { ParamDefinition as PD } from '../../mol-util/param-definition.js';
import { PluginStateObject as SO } from '../objects.js';
import { Color } from '../../mol-util/color/index.js';
import { Clipping } from '../../mol-theme/clipping.js';
export { StructureRepresentation3D };
export { ExplodeStructureRepresentation3D };
export { SpinStructureRepresentation3D };
export { UnwindStructureAssemblyRepresentation3D };
export { OverpaintStructureRepresentation3DFromScript };
export { OverpaintStructureRepresentation3DFromBundle };
export { TransparencyStructureRepresentation3DFromScript };
export { TransparencyStructureRepresentation3DFromBundle };
export { EmissiveStructureRepresentation3DFromScript };
export { EmissiveStructureRepresentation3DFromBundle };
export { SubstanceStructureRepresentation3DFromScript };
export { SubstanceStructureRepresentation3DFromBundle };
export { ClippingStructureRepresentation3DFromScript };
export { ClippingStructureRepresentation3DFromBundle };
export { ThemeStrengthRepresentation3D };
export { VolumeRepresentation3D };
type StructureRepresentation3D = typeof StructureRepresentation3D;
declare const StructureRepresentation3D: StateTransformer<SO.Molecule.Structure, SO.Molecule.Structure.Representation3D, PD.Normalize<{
    type: PD.NamedParams<any, string>;
    colorTheme: PD.NamedParams<any, string>;
    sizeTheme: PD.NamedParams<any, string>;
}>>;
type UnwindStructureAssemblyRepresentation3D = typeof UnwindStructureAssemblyRepresentation3D;
declare const UnwindStructureAssemblyRepresentation3D: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    t: number;
}>>;
type ExplodeStructureRepresentation3D = typeof ExplodeStructureRepresentation3D;
declare const ExplodeStructureRepresentation3D: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    t: number;
}>>;
type SpinStructureRepresentation3D = typeof SpinStructureRepresentation3D;
declare const SpinStructureRepresentation3D: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    axis: PD.NamedParams<PD.Normalize<{
        principalAxis: /*elided*/ any;
    }>, "structure"> | PD.NamedParams<PD.Normalize<{
        vector: /*elided*/ any;
    }>, "custom">;
    origin: PD.NamedParams<PD.Normalize<unknown>, "structure"> | PD.NamedParams<PD.Normalize<{
        vector: /*elided*/ any;
    }>, "custom">;
    t: number;
}>>;
type OverpaintStructureRepresentation3DFromScript = typeof OverpaintStructureRepresentation3DFromScript;
declare const OverpaintStructureRepresentation3DFromScript: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    layers: PD.Normalize<{
        script: import("../../mol-script/types.js").Script;
        color: Color;
        clear: boolean;
    }>[];
}>>;
type OverpaintStructureRepresentation3DFromBundle = typeof OverpaintStructureRepresentation3DFromBundle;
declare const OverpaintStructureRepresentation3DFromBundle: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    layers: PD.Normalize<{
        bundle: StructureElement.Bundle;
        color: Color;
        clear: boolean;
    }>[];
}>>;
type TransparencyStructureRepresentation3DFromScript = typeof TransparencyStructureRepresentation3DFromScript;
declare const TransparencyStructureRepresentation3DFromScript: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    layers: PD.Normalize<{
        script: import("../../mol-script/types.js").Script;
        value: number;
    }>[];
}>>;
type TransparencyStructureRepresentation3DFromBundle = typeof TransparencyStructureRepresentation3DFromBundle;
declare const TransparencyStructureRepresentation3DFromBundle: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    layers: PD.Normalize<{
        bundle: StructureElement.Bundle;
        value: number;
    }>[];
}>>;
type EmissiveStructureRepresentation3DFromScript = typeof EmissiveStructureRepresentation3DFromScript;
declare const EmissiveStructureRepresentation3DFromScript: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    layers: PD.Normalize<{
        script: import("../../mol-script/types.js").Script;
        value: number;
    }>[];
}>>;
type EmissiveStructureRepresentation3DFromBundle = typeof EmissiveStructureRepresentation3DFromBundle;
declare const EmissiveStructureRepresentation3DFromBundle: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    layers: PD.Normalize<{
        bundle: StructureElement.Bundle;
        value: number;
    }>[];
}>>;
type SubstanceStructureRepresentation3DFromScript = typeof SubstanceStructureRepresentation3DFromScript;
declare const SubstanceStructureRepresentation3DFromScript: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    layers: PD.Normalize<{
        script: import("../../mol-script/types.js").Script;
        material: {
            metalness: number;
            roughness: number;
            bumpiness: number;
        };
        clear: boolean;
    }>[];
}>>;
type SubstanceStructureRepresentation3DFromBundle = typeof SubstanceStructureRepresentation3DFromBundle;
declare const SubstanceStructureRepresentation3DFromBundle: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    layers: PD.Normalize<{
        bundle: StructureElement.Bundle;
        material: {
            metalness: number;
            roughness: number;
            bumpiness: number;
        };
        clear: boolean;
    }>[];
}>>;
type ClippingStructureRepresentation3DFromScript = typeof ClippingStructureRepresentation3DFromScript;
declare const ClippingStructureRepresentation3DFromScript: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    layers: PD.Normalize<{
        script: import("../../mol-script/types.js").Script;
        groups: Clipping.Groups.Flag;
    }>[];
}>>;
type ClippingStructureRepresentation3DFromBundle = typeof ClippingStructureRepresentation3DFromBundle;
declare const ClippingStructureRepresentation3DFromBundle: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    layers: PD.Normalize<{
        bundle: StructureElement.Bundle;
        groups: Clipping.Groups.Flag;
    }>[];
}>>;
type ThemeStrengthRepresentation3D = typeof ThemeStrengthRepresentation3D;
declare const ThemeStrengthRepresentation3D: StateTransformer<SO.Molecule.Structure.Representation3D, SO.Molecule.Structure.Representation3DState, PD.Normalize<{
    overpaintStrength: number;
    transparencyStrength: number;
    emissiveStrength: number;
    substanceStrength: number;
}>>;
export declare namespace VolumeRepresentation3DHelpers {
    function getDefaultParams(ctx: PluginContext, name: VolumeRepresentationRegistry.BuiltIn, volume: Volume, volumeParams?: Partial<PD.Values<PD.Params>>, colorName?: ColorTheme.BuiltIn, colorParams?: Partial<ColorTheme.Props>, sizeName?: SizeTheme.BuiltIn, sizeParams?: Partial<SizeTheme.Props>): StateTransformer.Params<VolumeRepresentation3D>;
    function getDefaultParamsStatic(ctx: PluginContext, name: VolumeRepresentationRegistry.BuiltIn, volumeParams?: Partial<PD.Values<PD.Params>>, colorName?: ColorTheme.BuiltIn, colorParams?: Partial<ColorTheme.Props>, sizeName?: SizeTheme.BuiltIn, sizeParams?: Partial<SizeTheme.Props>): StateTransformer.Params<VolumeRepresentation3D>;
    function getDescription(props: any): string | undefined;
}
type VolumeRepresentation3D = typeof VolumeRepresentation3D;
declare const VolumeRepresentation3D: StateTransformer<SO.Volume.Data, SO.Volume.Representation3D, PD.Normalize<{
    type: PD.NamedParams<any, string>;
    colorTheme: PD.NamedParams<any, string>;
    sizeTheme: PD.NamedParams<any, string>;
}>>;
export { ShapeRepresentation3D };
type ShapeRepresentation3D = typeof ShapeRepresentation3D;
declare const ShapeRepresentation3D: StateTransformer<SO.Shape.Provider, SO.Shape.Representation3D, PD.Normalize<{}>>;
export { ModelUnitcell3D };
type ModelUnitcell3D = typeof ModelUnitcell3D;
declare const ModelUnitcell3D: StateTransformer<SO.Molecule.Model, SO.Shape.Representation3D, PD.Normalize<{
    cellColor: Color;
    cellScale: number;
    ref: "origin" | "model";
    attachment: "center" | "corner";
    doubleSided: boolean;
    flipSided: boolean;
    flatShaded: boolean;
    ignoreLight: boolean;
    celShaded: boolean;
    xrayShaded: boolean | "inverted";
    transparentBackfaces: "off" | "on" | "opaque";
    bumpFrequency: number;
    bumpAmplitude: number;
    interior: PD.Normalize<{
        color: /*elided*/ any;
        colorStrength: /*elided*/ any;
        substance: /*elided*/ any;
        substanceStrength: /*elided*/ any;
    }>;
    alpha: number;
    quality: "auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest";
    material: PD.Normalize<{
        metalness: number;
        roughness: number;
        bumpiness: number;
    }>;
    clip: PD.Normalize<{
        variant: /*elided*/ any;
        objects: /*elided*/ any;
    }>;
    emissive: number;
    density: number;
    instanceGranularity: boolean;
    lod: import("../../mol-math/linear-algebra.js").Vec3;
    cellSize: number;
    batchSize: number;
}>>;
export { StructureBoundingBox3D };
type StructureBoundingBox3D = typeof StructureBoundingBox3D;
declare const StructureBoundingBox3D: StateTransformer<SO.Molecule.Structure, SO.Shape.Representation3D, PD.Normalize<{
    doubleSided: boolean;
    flipSided: boolean;
    flatShaded: boolean;
    ignoreLight: boolean;
    celShaded: boolean;
    xrayShaded: boolean | "inverted";
    transparentBackfaces: "off" | "on" | "opaque";
    bumpFrequency: number;
    bumpAmplitude: number;
    interior: PD.Normalize<{
        color: /*elided*/ any;
        colorStrength: /*elided*/ any;
        substance: /*elided*/ any;
        substanceStrength: /*elided*/ any;
    }>;
    alpha: number;
    quality: "auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest";
    material: PD.Normalize<{
        metalness: number;
        roughness: number;
        bumpiness: number;
    }>;
    clip: PD.Normalize<{
        variant: /*elided*/ any;
        objects: /*elided*/ any;
    }>;
    emissive: number;
    density: number;
    instanceGranularity: boolean;
    lod: import("../../mol-math/linear-algebra.js").Vec3;
    cellSize: number;
    batchSize: number;
    radius: number;
    color: Color;
}>>;
export { StructureSelectionsDistance3D };
type StructureSelectionsDistance3D = typeof StructureSelectionsDistance3D;
declare const StructureSelectionsDistance3D: StateTransformer<SO.Molecule.Structure.Selections, SO.Shape.Representation3D, PD.Normalize<{
    visuals: ("text" | "lines")[];
    unitLabel: string;
    borderWidth: number;
    customText: string;
    textColor: Color;
    textSize: number;
    sizeFactor: number;
    borderColor: Color;
    offsetX: number;
    offsetY: number;
    offsetZ: number;
    background: boolean;
    backgroundMargin: number;
    backgroundColor: Color;
    backgroundOpacity: number;
    tether: boolean;
    tetherLength: number;
    tetherBaseWidth: number;
    attachment: "bottom-left" | "bottom-center" | "bottom-right" | "middle-left" | "middle-center" | "middle-right" | "top-left" | "top-center" | "top-right";
    fontFamily: import("../../mol-geo/geometry/text/font-atlas.js").FontFamily;
    fontQuality: number;
    fontStyle: import("../../mol-geo/geometry/text/font-atlas.js").FontStyle;
    fontVariant: import("../../mol-geo/geometry/text/font-atlas.js").FontVariant;
    fontWeight: import("../../mol-geo/geometry/text/font-atlas.js").FontWeight;
    alpha: number;
    quality: "auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest";
    material: PD.Normalize<{
        metalness: number;
        roughness: number;
        bumpiness: number;
    }>;
    clip: PD.Normalize<{
        variant: /*elided*/ any;
        objects: /*elided*/ any;
    }>;
    emissive: number;
    density: number;
    instanceGranularity: boolean;
    lod: import("../../mol-math/linear-algebra.js").Vec3;
    cellSize: number;
    batchSize: number;
    lineSizeAttenuation: boolean;
    linesColor: Color;
    linesSize: number;
    dashLength: number;
}>>;
export { StructureSelectionsAngle3D };
type StructureSelectionsAngle3D = typeof StructureSelectionsAngle3D;
declare const StructureSelectionsAngle3D: StateTransformer<SO.Molecule.Structure.Selections, SO.Shape.Representation3D, PD.Normalize<{
    visuals: ("text" | "vectors" | "sector" | "arc")[];
    borderWidth: number;
    customText: string;
    textColor: Color;
    textSize: number;
    sizeFactor: number;
    borderColor: Color;
    offsetX: number;
    offsetY: number;
    offsetZ: number;
    background: boolean;
    backgroundMargin: number;
    backgroundColor: Color;
    backgroundOpacity: number;
    tether: boolean;
    tetherLength: number;
    tetherBaseWidth: number;
    attachment: "bottom-left" | "bottom-center" | "bottom-right" | "middle-left" | "middle-center" | "middle-right" | "top-left" | "top-center" | "top-right";
    fontFamily: import("../../mol-geo/geometry/text/font-atlas.js").FontFamily;
    fontQuality: number;
    fontStyle: import("../../mol-geo/geometry/text/font-atlas.js").FontStyle;
    fontVariant: import("../../mol-geo/geometry/text/font-atlas.js").FontVariant;
    fontWeight: import("../../mol-geo/geometry/text/font-atlas.js").FontWeight;
    alpha: number;
    quality: "auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest";
    material: PD.Normalize<{
        metalness: number;
        roughness: number;
        bumpiness: number;
    }>;
    clip: PD.Normalize<{
        variant: /*elided*/ any;
        objects: /*elided*/ any;
    }>;
    emissive: number;
    density: number;
    instanceGranularity: boolean;
    lod: import("../../mol-math/linear-algebra.js").Vec3;
    cellSize: number;
    batchSize: number;
    ignoreLight: boolean;
    sectorOpacity: number;
    color: Color;
    arcScale: number;
    doubleSided: boolean;
    flipSided: boolean;
    flatShaded: boolean;
    celShaded: boolean;
    xrayShaded: boolean | "inverted";
    transparentBackfaces: "off" | "on" | "opaque";
    bumpFrequency: number;
    bumpAmplitude: number;
    interior: PD.Normalize<{
        color: /*elided*/ any;
        colorStrength: /*elided*/ any;
        substance: /*elided*/ any;
        substanceStrength: /*elided*/ any;
    }>;
    lineSizeAttenuation: boolean;
    linesSize: number;
    dashLength: number;
}>>;
export { StructureSelectionsDihedral3D };
type StructureSelectionsDihedral3D = typeof StructureSelectionsDihedral3D;
declare const StructureSelectionsDihedral3D: StateTransformer<SO.Molecule.Structure.Selections, SO.Shape.Representation3D, PD.Normalize<{
    visuals: ("text" | "vectors" | "sector" | "arc" | "extenders" | "arms" | "connector")[];
    borderWidth: number;
    customText: string;
    textColor: Color;
    textSize: number;
    sizeFactor: number;
    borderColor: Color;
    offsetX: number;
    offsetY: number;
    offsetZ: number;
    background: boolean;
    backgroundMargin: number;
    backgroundColor: Color;
    backgroundOpacity: number;
    tether: boolean;
    tetherLength: number;
    tetherBaseWidth: number;
    attachment: "bottom-left" | "bottom-center" | "bottom-right" | "middle-left" | "middle-center" | "middle-right" | "top-left" | "top-center" | "top-right";
    fontFamily: import("../../mol-geo/geometry/text/font-atlas.js").FontFamily;
    fontQuality: number;
    fontStyle: import("../../mol-geo/geometry/text/font-atlas.js").FontStyle;
    fontVariant: import("../../mol-geo/geometry/text/font-atlas.js").FontVariant;
    fontWeight: import("../../mol-geo/geometry/text/font-atlas.js").FontWeight;
    alpha: number;
    quality: "auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest";
    material: PD.Normalize<{
        metalness: number;
        roughness: number;
        bumpiness: number;
    }>;
    clip: PD.Normalize<{
        variant: /*elided*/ any;
        objects: /*elided*/ any;
    }>;
    emissive: number;
    density: number;
    instanceGranularity: boolean;
    lod: import("../../mol-math/linear-algebra.js").Vec3;
    cellSize: number;
    batchSize: number;
    ignoreLight: boolean;
    sectorOpacity: number;
    color: Color;
    arcScale: number;
    doubleSided: boolean;
    flipSided: boolean;
    flatShaded: boolean;
    celShaded: boolean;
    xrayShaded: boolean | "inverted";
    transparentBackfaces: "off" | "on" | "opaque";
    bumpFrequency: number;
    bumpAmplitude: number;
    interior: PD.Normalize<{
        color: /*elided*/ any;
        colorStrength: /*elided*/ any;
        substance: /*elided*/ any;
        substanceStrength: /*elided*/ any;
    }>;
    lineSizeAttenuation: boolean;
    linesSize: number;
    dashLength: number;
}>>;
export { StructureSelectionsLabel3D };
type StructureSelectionsLabel3D = typeof StructureSelectionsLabel3D;
declare const StructureSelectionsLabel3D: StateTransformer<SO.Molecule.Structure.Selections, SO.Shape.Representation3D, PD.Normalize<{
    scaleByRadius: boolean;
    visuals: "text"[];
    snapshotKey: string;
    tooltip: string;
    borderWidth: number;
    customText: string;
    textColor: Color;
    textSize: number;
    sizeFactor: number;
    borderColor: Color;
    offsetX: number;
    offsetY: number;
    offsetZ: number;
    background: boolean;
    backgroundMargin: number;
    backgroundColor: Color;
    backgroundOpacity: number;
    tether: boolean;
    tetherLength: number;
    tetherBaseWidth: number;
    attachment: "bottom-left" | "bottom-center" | "bottom-right" | "middle-left" | "middle-center" | "middle-right" | "top-left" | "top-center" | "top-right";
    fontFamily: import("../../mol-geo/geometry/text/font-atlas.js").FontFamily;
    fontQuality: number;
    fontStyle: import("../../mol-geo/geometry/text/font-atlas.js").FontStyle;
    fontVariant: import("../../mol-geo/geometry/text/font-atlas.js").FontVariant;
    fontWeight: import("../../mol-geo/geometry/text/font-atlas.js").FontWeight;
    alpha: number;
    quality: "auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest";
    material: PD.Normalize<{
        metalness: number;
        roughness: number;
        bumpiness: number;
    }>;
    clip: PD.Normalize<{
        variant: /*elided*/ any;
        objects: /*elided*/ any;
    }>;
    emissive: number;
    density: number;
    instanceGranularity: boolean;
    lod: import("../../mol-math/linear-algebra.js").Vec3;
    cellSize: number;
    batchSize: number;
}>>;
export { StructureSelectionsOrientation3D };
type StructureSelectionsOrientation3D = typeof StructureSelectionsOrientation3D;
declare const StructureSelectionsOrientation3D: StateTransformer<SO.Molecule.Structure.Selections, SO.Shape.Representation3D, PD.Normalize<{
    visuals: ("box" | "axes" | "ellipsoid")[];
    color: Color;
    scaleFactor: number;
    radiusScale: number;
    doubleSided: boolean;
    flipSided: boolean;
    flatShaded: boolean;
    ignoreLight: boolean;
    celShaded: boolean;
    xrayShaded: boolean | "inverted";
    transparentBackfaces: "off" | "on" | "opaque";
    bumpFrequency: number;
    bumpAmplitude: number;
    interior: PD.Normalize<{
        color: /*elided*/ any;
        colorStrength: /*elided*/ any;
        substance: /*elided*/ any;
        substanceStrength: /*elided*/ any;
    }>;
    alpha: number;
    quality: "auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest";
    material: PD.Normalize<{
        metalness: number;
        roughness: number;
        bumpiness: number;
    }>;
    clip: PD.Normalize<{
        variant: /*elided*/ any;
        objects: /*elided*/ any;
    }>;
    emissive: number;
    density: number;
    instanceGranularity: boolean;
    lod: import("../../mol-math/linear-algebra.js").Vec3;
    cellSize: number;
    batchSize: number;
}>>;
export { StructureSelectionsPlane3D };
type StructureSelectionsPlane3D = typeof StructureSelectionsPlane3D;
declare const StructureSelectionsPlane3D: StateTransformer<SO.Molecule.Structure.Selections, SO.Shape.Representation3D, PD.Normalize<{
    visuals: "plane"[];
    color: Color;
    scaleFactor: number;
    doubleSided: boolean;
    flipSided: boolean;
    flatShaded: boolean;
    ignoreLight: boolean;
    celShaded: boolean;
    xrayShaded: boolean | "inverted";
    transparentBackfaces: "off" | "on" | "opaque";
    bumpFrequency: number;
    bumpAmplitude: number;
    interior: PD.Normalize<{
        color: /*elided*/ any;
        colorStrength: /*elided*/ any;
        substance: /*elided*/ any;
        substanceStrength: /*elided*/ any;
    }>;
    alpha: number;
    quality: "auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest";
    material: PD.Normalize<{
        metalness: number;
        roughness: number;
        bumpiness: number;
    }>;
    clip: PD.Normalize<{
        variant: /*elided*/ any;
        objects: /*elided*/ any;
    }>;
    emissive: number;
    density: number;
    instanceGranularity: boolean;
    lod: import("../../mol-math/linear-algebra.js").Vec3;
    cellSize: number;
    batchSize: number;
}>>;
