/**
 * Copyright (c) 2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
import { Structure, StructureElement } from '../mol-model/structure';
import { Script } from '../mol-script/script';
import { Material } from '../mol-util/material';
export { Substance };
declare type Substance = {
    readonly layers: ReadonlyArray<Substance.Layer>;
};
declare function Substance(layers: ReadonlyArray<Substance.Layer>): Substance;
declare namespace Substance {
    type Layer = {
        readonly loci: StructureElement.Loci;
        readonly material: Material;
        readonly clear: boolean;
    };
    const Empty: Substance;
    function areEqual(sA: Substance, sB: Substance): boolean;
    function isEmpty(overpaint: Substance): boolean;
    function remap(substance: Substance, structure: Structure): {
        layers: Layer[];
    };
    function merge(substance: Substance): Substance;
    function filter(substance: Substance, filter: Structure): Substance;
    type ScriptLayer = {
        script: Script;
        material: Material;
        clear: boolean;
    };
    function ofScript(scriptLayers: ScriptLayer[], structure: Structure): Substance;
    type BundleLayer = {
        bundle: StructureElement.Bundle;
        material: Material;
        clear: boolean;
    };
    function ofBundle(bundleLayers: BundleLayer[], structure: Structure): Substance;
    function toBundle(overpaint: Substance): {
        layers: BundleLayer[];
    };
}
