/**
 * Copyright (c) 2018-2025 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>
 * @author Ventura Rivera <venturaxrivera@gmail.com>
 */
import { StateTransformParameters } from '../mol-plugin-ui/state/common.js';
import { PluginSpec } from '../mol-plugin/spec.js';
import { StateAction, StateTransformer } from '../mol-state/index.js';
import { Loci } from '../mol-model/loci.js';
import { SequenceViewMode } from './sequence.js';
export interface PluginUISpec extends PluginSpec {
    customParamEditors?: [StateAction | StateTransformer, StateTransformParameters.Class][];
    components?: {
        controls?: PluginUISpec.LayoutControls;
        remoteState?: 'none' | 'default';
        structureTools?: React.ComponentClass | React.FC;
        viewport?: {
            view?: React.ComponentClass | React.FC;
            controls?: React.ComponentClass | React.FC;
            snapshotDescription?: React.ComponentClass | React.FC;
        };
        sequenceViewer?: {
            view?: React.ComponentClass | React.FC;
            modeOptions?: SequenceViewMode[];
            defaultMode?: SequenceViewMode;
        };
        hideTaskOverlay?: boolean;
        disableDragOverlay?: boolean;
        selectionTools?: {
            controls?: React.ComponentClass | React.FC;
            granularityOptions?: Loci.Granularity[];
            hide?: {
                granularity?: boolean;
                union?: boolean;
                subtract?: boolean;
                intersect?: boolean;
                set?: boolean;
                theme?: boolean;
                componentAdd?: boolean;
                componentRemove?: boolean;
                undo?: boolean;
                help?: boolean;
                cancel?: boolean;
            };
        };
    };
}
export declare namespace PluginUISpec {
    interface LayoutControls {
        top?: React.ComponentClass | React.FC | 'none';
        left?: React.ComponentClass | React.FC | 'none';
        right?: React.ComponentClass | React.FC | 'none';
        bottom?: React.ComponentClass | React.FC | 'none';
    }
}
export declare const DefaultPluginUISpec: () => PluginUISpec;
