/**
 * Copyright (c) 2022-2024 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
import { PluginUIComponent } from '../../../mol-plugin-ui/base.js';
import { State, StateObjectCell, StateSelection, StateTransformer } from '../../../mol-state/index.js';
import { ParamOnChange } from '../../../mol-plugin-ui/controls/parameters.js';
import { ParamDefinition as PD } from '../../../mol-util/param-definition.js';
import { Clip } from '../../../mol-util/clip.js';
import { Color } from '../../../mol-util/color/index.js';
import { ColorProps, LodParams, MesoscaleGroupProps, GraphicsMode } from '../data/state.js';
import React from 'react';
import { PluginStateObject as PSO } from '../../../mol-plugin-state/objects.js';
import { PluginContext } from '../../../mol-plugin/context.js';
export declare class ModelInfo extends PluginUIComponent<{}, {
    isDisabled: boolean;
}> {
    state: {
        isDisabled: boolean;
    };
    componentDidMount(): void;
    get info(): {
        selectionDescription: string;
        description: string;
        link: string;
    } | undefined;
    render(): import("react/jsx-runtime").JSX.Element | undefined;
}
declare const SelectionStyleParam: PD.Select<"color" | "outline" | "color+outline">;
type SelectionStyle = typeof SelectionStyleParam['defaultValue'];
export declare class SelectionInfo extends PluginUIComponent<{}, {
    isDisabled: boolean;
}> {
    state: {
        isDisabled: boolean;
    };
    componentDidMount(): void;
    get info(): {
        label: string;
        key: string;
        description?: string;
    }[];
    find(label: string): void;
    remove(key: string): void;
    center(key: string): void;
    get selection(): import("react/jsx-runtime").JSX.Element;
    get style(): "color" | "color+outline" | "outline" | undefined;
    setStyle(value: SelectionStyle): void;
    renderStyle(): import("react/jsx-runtime").JSX.Element;
    render(): import("react/jsx-runtime").JSX.Element;
}
export declare function MesoMarkdownAnchor({ href, children, element }: {
    href?: string;
    children?: any;
    element?: any;
}): any;
export declare function MesoViewportSnapshotDescription(): import("react/jsx-runtime").JSX.Element | null;
export declare class FocusInfo extends PluginUIComponent<{}, {
    isDisabled: boolean;
}> {
    componentDidMount(): void;
    get info(): string;
    render(): import("react/jsx-runtime").JSX.Element;
}
export declare class EntityControls extends PluginUIComponent<{}, {
    isDisabled: boolean;
}> {
    filterRef: React.RefObject<HTMLInputElement>;
    prevFilter: string;
    filterFocus: boolean;
    state: {
        isDisabled: boolean;
    };
    componentDidMount(): void;
    componentDidUpdate(): void;
    get roots(): StateSelection.CellSeq<StateObjectCell<import("../data/state.js").MesoscaleGroupObject, import("../../../mol-state/index.js").StateTransform<StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>>>>;
    setGroupBy: (value: number) => void;
    get groupBy(): number;
    setFilter: (value: string) => void;
    get filter(): string;
    setGraphics: (graphics: GraphicsMode) => void;
    get graphics(): GraphicsMode;
    renderGraphics(): import("react/jsx-runtime").JSX.Element;
    render(): import("react/jsx-runtime").JSX.Element;
}
declare class Node<P extends {}, S extends {
    isDisabled: boolean;
}> extends PluginUIComponent<P & {
    cell: StateObjectCell;
    depth: number;
}, S> {
    is(e: State.ObjectEvent): boolean;
    get ref(): string;
    get cell(): (P & {
        cell: StateObjectCell;
        depth: number;
    } & {
        children?: any;
    })["cell"];
    get roots(): StateSelection.CellSeq<StateObjectCell<import("../data/state.js").MesoscaleGroupObject, import("../../../mol-state/index.js").StateTransform<StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>>>>;
    componentDidMount(): void;
}
export declare class GroupNode extends Node<{
    filter: string;
}, {
    isCollapsed: boolean;
    action?: 'color' | 'clip' | 'root';
    isDisabled: boolean;
}> {
    state: {
        isCollapsed: boolean;
        action: undefined;
        isDisabled: boolean;
    };
    toggleExpanded: (e: React.MouseEvent<HTMLElement>) => void;
    toggleColor: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
    toggleClip: () => void;
    toggleRoot: () => void;
    showInfo: (e: React.MouseEvent<HTMLElement>) => void;
    highlight: (e: React.MouseEvent<HTMLElement>) => void;
    clearHighlight: (e: React.MouseEvent<HTMLElement>) => void;
    get groups(): StateSelection.CellSeq<StateObjectCell<import("../data/state.js").MesoscaleGroupObject, import("../../../mol-state/index.js").StateTransform<StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>>>>;
    get allGroups(): StateObjectCell<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateTransform<StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>>>[];
    get entities(): StateObjectCell<PSO.Molecule.Structure.Representation3D | PSO.Shape.Representation3D, import("../../../mol-state/index.js").StateTransform<StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>>>[];
    get filteredEntities(): StateObjectCell<PSO.Molecule.Structure.Representation3D | PSO.Shape.Representation3D, import("../../../mol-state/index.js").StateTransform<StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>>>[];
    get allEntities(): StateObjectCell<PSO.Molecule.Structure.Representation3D | PSO.Shape.Representation3D, import("../../../mol-state/index.js").StateTransform<StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>>>[];
    get allFilteredEntities(): StateObjectCell<PSO.Molecule.Structure.Representation3D | PSO.Shape.Representation3D, import("../../../mol-state/index.js").StateTransform<StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>>>[];
    toggleVisible: (e: React.MouseEvent<HTMLElement>) => void;
    updateColor: (values: ColorProps) => void;
    updateRoot: (values: PD.Values) => Promise<void>;
    updateClip: (values: PD.Values) => void;
    updateLod: (values: PD.Values) => void;
    update: (props: MesoscaleGroupProps) => void;
    renderColor(): import("react/jsx-runtime").JSX.Element;
    render(): import("react/jsx-runtime").JSX.Element | undefined;
}
export declare class EntityNode extends Node<{}, {
    action?: 'color' | 'clip';
    isDisabled: boolean;
}> {
    state: {
        action: undefined;
        isDisabled: boolean;
    };
    clipMapping: import("../../../mol-util/param-mapping.js").ParamMapping<{
        type: "none" | "sphere" | "cube" | "plane" | "cylinder" | "infiniteCone";
        invert: boolean;
        position: PD.Normalize<{
            x: /*elided*/ any;
            y: /*elided*/ any;
            z: /*elided*/ any;
        }>;
        rotation: PD.Normalize<{
            axis: /*elided*/ any;
            angle: /*elided*/ any;
        }>;
        scale: PD.Normalize<{
            x: /*elided*/ any;
            y: /*elided*/ any;
            z: /*elided*/ any;
        }>;
    }, PD.Values<{
        variant: PD.Select<Clip.Variant>;
        objects: PD.ObjectList<PD.Normalize<{
            type: "none" | "sphere" | "cube" | "plane" | "cylinder" | "infiniteCone";
            invert: boolean;
            position: import("../../../mol-math/linear-algebra.js").Vec3;
            rotation: PD.Normalize<{
                axis: /*elided*/ any;
                angle: /*elided*/ any;
            }>;
            scale: import("../../../mol-math/linear-algebra.js").Vec3;
            transform: import("../../../mol-math/linear-algebra.js").Mat4;
        }>>;
    }> | undefined, PluginContext>;
    get groups(): StateSelection.CellSeq<StateObjectCell<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateTransform<StateTransformer<PSO.Root, import("../data/state.js").MesoscaleGroupObject, PD.Normalize<{
        root: boolean;
        index: number;
        tag: string;
        label: string;
        description: string;
        hidden: boolean;
        color: PD.Normalize<{
            type: /*elided*/ any;
            illustrative: /*elided*/ any;
            value: /*elided*/ any;
            variability: /*elided*/ any;
            shift: /*elided*/ any;
            lightness: /*elided*/ any;
            alpha: /*elided*/ any;
            emissive: /*elided*/ any;
        }>;
        lightness: number;
        alpha: number;
        emissive: number;
        lod: PD.Normalize<{
            lodLevels: /*elided*/ any;
            cellSize: /*elided*/ any;
            batchSize: /*elided*/ any;
            approximate: /*elided*/ any;
        }>;
        clip: PD.Normalize<{
            type: /*elided*/ any;
            invert: /*elided*/ any;
            position: /*elided*/ any;
            rotation: /*elided*/ any;
            scale: /*elided*/ any;
        }>;
    }>>>>>;
    toggleVisible: (e: React.MouseEvent<HTMLElement>) => void;
    toggleColor: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
    toggleClip: () => void;
    highlight: (e: React.MouseEvent<HTMLElement>) => void;
    clearHighlight: (e: React.MouseEvent<HTMLElement>) => void;
    toggleSelect: (e: React.MouseEvent<HTMLElement>) => void;
    center: (e: React.MouseEvent<HTMLElement>) => void;
    handleClick: (e: React.MouseEvent<HTMLElement>) => void;
    get colorValue(): Color | undefined;
    get illustrativeValue(): {
        illustrative: boolean;
    } | undefined;
    get lightnessValue(): {
        lightness: number;
    } | undefined;
    get opacityValue(): {
        alpha: number;
    } | undefined;
    get emissiveValue(): {
        emissive: number;
    } | undefined;
    get clipValue(): Clip.Props | undefined;
    get lodValue(): PD.Values<typeof LodParams> | undefined;
    get patternValue(): {
        amplitude: number;
        frequency: number;
    } | undefined;
    updateColor: ParamOnChange;
    updateIllustrative: (values: PD.Values) => Promise<void>;
    updateLightness: (values: PD.Values) => Promise<void>;
    updateOpacity: (values: PD.Values) => Promise<void>;
    updateEmissive: (values: PD.Values) => Promise<void>;
    updateClip: (props: Clip.Props) => void;
    updateLod: (values: PD.Values) => void;
    updatePattern: (values: PD.Values) => Promise<void>;
    render(): import("react/jsx-runtime").JSX.Element;
}
export {};
