/**
 * Copyright (c) 2023-2024 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Adam Midlik <midlik@gmail.com>
 */
import { RequiredField } from '../generic/field-schema.js';
import { SimpleParamsSchema } from '../generic/params-schema.js';
import { NodeFor, ParamsOfKind, SubtreeOfKind, TreeFor, TreeSchema } from '../generic/tree-schema.js';
import { MolstarParseFormatT } from '../mvs/param-types.js';
/** Schema for `MolstarTree` (intermediate tree representation between `MVSTree` and a real Molstar state) */
export declare const MolstarTreeSchema: TreeSchema<{
    download: SimpleParamsSchema<{
        /** Specifies whether file is downloaded as bytes array or string */
        is_binary: RequiredField<boolean>;
        url: RequiredField<string>;
    }>;
    parse: SimpleParamsSchema<{
        /** File format */
        format: RequiredField<MolstarParseFormatT>;
    }>;
    coordinates: SimpleParamsSchema<{
        /** File format */
        format: RequiredField<MolstarParseFormatT>;
    }>;
    trajectory: SimpleParamsSchema<{
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        /** File format */
        format: RequiredField<MolstarParseFormatT>;
    }>;
    trajectory_with_coordinates: SimpleParamsSchema<{
        /** Coordinates reference */
        coordinates_ref: RequiredField<string>;
    }>;
    topology_with_coordinates: SimpleParamsSchema<{
        format: RequiredField<MolstarParseFormatT>;
        coordinates_ref: RequiredField<string>;
    }>;
    model: SimpleParamsSchema<Pick<{
        type: RequiredField<import("../mvs/param-types.js").StructureTypeT>;
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        model_index: RequiredField<number>;
        assembly_id: RequiredField<string | null>;
        radius: RequiredField<number>;
        ijk_min: RequiredField<[number, number, number]>;
        ijk_max: RequiredField<[number, number, number]>;
        coordinates_ref: RequiredField<string | null>;
    }, "model_index">>;
    structure: SimpleParamsSchema<Omit<{
        type: RequiredField<import("../mvs/param-types.js").StructureTypeT>;
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        model_index: RequiredField<number>;
        assembly_id: RequiredField<string | null>;
        radius: RequiredField<number>;
        ijk_min: RequiredField<[number, number, number]>;
        ijk_max: RequiredField<[number, number, number]>;
        coordinates_ref: RequiredField<string | null>;
    }, "block_header" | "block_index" | "model_index" | "coordinates_ref">>;
    root: SimpleParamsSchema<{}>;
    transform: SimpleParamsSchema<{
        rotation: RequiredField<number[]>;
        translation: RequiredField<import("../mvs/param-types.js").Vector3>;
        rotation_center: RequiredField<"centroid" | import("../mvs/param-types.js").Vector3 | null>;
        matrix: RequiredField<number[] | null>;
    }>;
    instance: SimpleParamsSchema<{
        rotation: RequiredField<number[]>;
        translation: RequiredField<import("../mvs/param-types.js").Vector3>;
        rotation_center: RequiredField<"centroid" | import("../mvs/param-types.js").Vector3 | null>;
        matrix: RequiredField<number[] | null>;
    }>;
    component: SimpleParamsSchema<{
        selector: RequiredField<import("../mvs/param-types.js").ComponentSelectorT | import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").ComponentExpressionT[]>;
    }>;
    component_from_uri: SimpleParamsSchema<{
        field_name: RequiredField<string>;
        field_values: RequiredField<string[] | null>;
        uri: RequiredField<string>;
        format: RequiredField<import("../mvs/param-types.js").SchemaFormatT>;
        schema: RequiredField<import("../mvs/param-types.js").SchemaT>;
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        category_name: RequiredField<string | null>;
        field_remapping: RequiredField<{
            [x: string]: string | null;
        }>;
    }>;
    component_from_source: SimpleParamsSchema<{
        field_name: RequiredField<string>;
        field_values: RequiredField<string[] | null>;
        schema: RequiredField<import("../mvs/param-types.js").SchemaT>;
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        category_name: RequiredField<string | null>;
        field_remapping: RequiredField<{
            [x: string]: string | null;
        }>;
    }>;
    representation: import("../generic/params-schema.js").UnionParamsSchema<"type", {
        cartoon: SimpleParamsSchema<{
            size_factor: RequiredField<number>;
            tubular_helices: RequiredField<boolean>;
        }>;
        backbone: SimpleParamsSchema<{
            size_factor: RequiredField<number>;
        }>;
        ball_and_stick: SimpleParamsSchema<{
            size_factor: RequiredField<number>;
            ignore_hydrogens: RequiredField<boolean>;
        }>;
        line: SimpleParamsSchema<{
            size_factor: RequiredField<number>;
            ignore_hydrogens: RequiredField<boolean>;
        }>;
        spacefill: SimpleParamsSchema<{
            size_factor: RequiredField<number>;
            ignore_hydrogens: RequiredField<boolean>;
        }>;
        carbohydrate: SimpleParamsSchema<{
            size_factor: RequiredField<number>;
        }>;
        surface: SimpleParamsSchema<{
            surface_type: RequiredField<"gaussian" | "molecular">;
            size_factor: RequiredField<number>;
            ignore_hydrogens: RequiredField<boolean>;
        }>;
    }>;
    volume: SimpleParamsSchema<{
        channel_id: RequiredField<string | null>;
    }>;
    volume_representation: import("../generic/params-schema.js").UnionParamsSchema<"type", {
        isosurface: SimpleParamsSchema<{
            relative_isovalue: RequiredField<number | null>;
            absolute_isovalue: RequiredField<number | null>;
            show_wireframe: RequiredField<boolean>;
            show_faces: RequiredField<boolean>;
        }>;
        grid_slice: SimpleParamsSchema<{
            dimension: RequiredField<"x" | "y" | "z">;
            absolute_index: RequiredField<number | null>;
            relative_index: RequiredField<number | null>;
            relative_isovalue: RequiredField<number | null>;
            absolute_isovalue: RequiredField<number | null>;
        }>;
    }>;
    color: SimpleParamsSchema<{
        color: RequiredField<import("../mvs/param-types.js").ColorT>;
        selector: RequiredField<import("../mvs/param-types.js").ComponentSelectorT | import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").ComponentExpressionT[]>;
    }>;
    color_from_uri: SimpleParamsSchema<{
        field_name: RequiredField<string>;
        palette: RequiredField<import("../mvs/param-types.js").CategoricalPalette | import("../mvs/param-types.js").DiscretePalette | import("../mvs/param-types.js").ContinuousPalette | null>;
        uri: RequiredField<string>;
        format: RequiredField<import("../mvs/param-types.js").SchemaFormatT>;
        schema: RequiredField<import("../mvs/param-types.js").SchemaT>;
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        category_name: RequiredField<string | null>;
        field_remapping: RequiredField<{
            [x: string]: string | null;
        }>;
    }>;
    color_from_source: SimpleParamsSchema<{
        field_name: RequiredField<string>;
        palette: RequiredField<import("../mvs/param-types.js").CategoricalPalette | import("../mvs/param-types.js").DiscretePalette | import("../mvs/param-types.js").ContinuousPalette | null>;
        schema: RequiredField<import("../mvs/param-types.js").SchemaT>;
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        category_name: RequiredField<string | null>;
        field_remapping: RequiredField<{
            [x: string]: string | null;
        }>;
    }>;
    clip: import("../generic/params-schema.js").UnionParamsSchema<"type", {
        plane: SimpleParamsSchema<{
            normal: RequiredField<import("../mvs/param-types.js").Vector3>;
            point: RequiredField<import("../mvs/param-types.js").Vector3>;
            check_transform: RequiredField<number[] | null>;
            invert: RequiredField<boolean>;
            variant: RequiredField<"object" | "pixel">;
        }>;
        sphere: SimpleParamsSchema<{
            center: RequiredField<import("../mvs/param-types.js").Vector3>;
            radius: RequiredField<number>;
            check_transform: RequiredField<number[] | null>;
            invert: RequiredField<boolean>;
            variant: RequiredField<"object" | "pixel">;
        }>;
        box: SimpleParamsSchema<{
            center: RequiredField<import("../mvs/param-types.js").Vector3>;
            size: RequiredField<import("../mvs/param-types.js").Vector3>;
            rotation: RequiredField<number[]>;
            check_transform: RequiredField<number[] | null>;
            invert: RequiredField<boolean>;
            variant: RequiredField<"object" | "pixel">;
        }>;
    }>;
    opacity: SimpleParamsSchema<{
        opacity: RequiredField<number>;
    }>;
    label: SimpleParamsSchema<{
        text: RequiredField<string>;
    }>;
    label_from_uri: SimpleParamsSchema<{
        field_name: RequiredField<string>;
        uri: RequiredField<string>;
        format: RequiredField<import("../mvs/param-types.js").SchemaFormatT>;
        schema: RequiredField<import("../mvs/param-types.js").SchemaT>;
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        category_name: RequiredField<string | null>;
        field_remapping: RequiredField<{
            [x: string]: string | null;
        }>;
    }>;
    label_from_source: SimpleParamsSchema<{
        field_name: RequiredField<string>;
        schema: RequiredField<import("../mvs/param-types.js").SchemaT>;
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        category_name: RequiredField<string | null>;
        field_remapping: RequiredField<{
            [x: string]: string | null;
        }>;
    }>;
    tooltip: SimpleParamsSchema<{
        text: RequiredField<string>;
    }>;
    tooltip_from_uri: SimpleParamsSchema<{
        field_name: RequiredField<string>;
        uri: RequiredField<string>;
        format: RequiredField<import("../mvs/param-types.js").SchemaFormatT>;
        schema: RequiredField<import("../mvs/param-types.js").SchemaT>;
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        category_name: RequiredField<string | null>;
        field_remapping: RequiredField<{
            [x: string]: string | null;
        }>;
    }>;
    tooltip_from_source: SimpleParamsSchema<{
        field_name: RequiredField<string>;
        schema: RequiredField<import("../mvs/param-types.js").SchemaT>;
        block_header: RequiredField<string | null>;
        block_index: RequiredField<number>;
        category_name: RequiredField<string | null>;
        field_remapping: RequiredField<{
            [x: string]: string | null;
        }>;
    }>;
    focus: SimpleParamsSchema<{
        direction: RequiredField<import("../mvs/param-types.js").Vector3>;
        up: RequiredField<import("../mvs/param-types.js").Vector3>;
        radius: RequiredField<number | null>;
        radius_factor: RequiredField<number>;
        radius_extent: RequiredField<number>;
    }>;
    camera: SimpleParamsSchema<{
        target: RequiredField<import("../mvs/param-types.js").Vector3>;
        position: RequiredField<import("../mvs/param-types.js").Vector3>;
        up: RequiredField<import("../mvs/param-types.js").Vector3>;
        near: RequiredField<number | null>;
    }>;
    canvas: SimpleParamsSchema<{
        background_color: RequiredField<import("../mvs/param-types.js").ColorT>;
    }>;
    primitives: SimpleParamsSchema<{
        color: RequiredField<import("../mvs/param-types.js").ColorT>;
        label_color: RequiredField<import("../mvs/param-types.js").ColorT>;
        tooltip: RequiredField<string | null>;
        opacity: RequiredField<number>;
        label_opacity: RequiredField<number>;
        label_show_tether: RequiredField<boolean>;
        label_tether_length: RequiredField<number>;
        label_attachment: RequiredField<import("../mvs/param-types.js").LabelAttachments>;
        label_background_color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
        snapshot_key: RequiredField<string | null>;
        instances: RequiredField<number[][] | null>;
    }>;
    primitives_from_uri: SimpleParamsSchema<{
        uri: RequiredField<string>;
        format: RequiredField<"mvs-node-json">;
        references: RequiredField<string[]>;
    }>;
    primitive: import("../generic/params-schema.js").UnionParamsSchema<"kind", {
        mesh: SimpleParamsSchema<{
            vertices: RequiredField<number[]>;
            indices: RequiredField<number[]>;
            triangle_groups: RequiredField<number[] | null>;
            group_colors: RequiredField<{
                [x: number]: import("../mvs/param-types.js").ColorT;
            }>;
            group_tooltips: RequiredField<{
                [x: number]: string;
            }>;
            color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            tooltip: RequiredField<string | null>;
            show_triangles: RequiredField<boolean>;
            show_wireframe: RequiredField<boolean>;
            wireframe_width: RequiredField<number>;
            wireframe_color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
        }>;
        lines: SimpleParamsSchema<{
            vertices: RequiredField<number[]>;
            indices: RequiredField<number[]>;
            line_groups: RequiredField<number[] | null>;
            group_colors: RequiredField<{
                [x: number]: import("../mvs/param-types.js").ColorT;
            }>;
            group_tooltips: RequiredField<{
                [x: number]: string;
            }>;
            group_widths: RequiredField<{
                [x: number]: number;
            }>;
            color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            tooltip: RequiredField<string | null>;
            width: RequiredField<number>;
        }>;
        tube: SimpleParamsSchema<{
            tooltip: RequiredField<string | null>;
            start: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            end: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            radius: RequiredField<number>;
            dash_length: RequiredField<number | null>;
            color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
        }>;
        arrow: SimpleParamsSchema<{
            start: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            end: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT | null>;
            direction: RequiredField<import("../mvs/param-types.js").Vector3 | null>;
            length: RequiredField<number | null>;
            show_start_cap: RequiredField<boolean>;
            start_cap_length: RequiredField<number | null>;
            start_cap_radius: RequiredField<number | null>;
            show_end_cap: RequiredField<boolean>;
            end_cap_length: RequiredField<number | null>;
            end_cap_radius: RequiredField<number | null>;
            show_tube: RequiredField<boolean>;
            tube_radius: RequiredField<number>;
            tube_dash_length: RequiredField<number | null>;
            color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            tooltip: RequiredField<string | null>;
        }>;
        distance_measurement: SimpleParamsSchema<{
            label_template: RequiredField<string>;
            label_size: RequiredField<number | null>;
            label_auto_size_scale: RequiredField<number>;
            label_auto_size_min: RequiredField<number>;
            label_color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            start: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            end: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            radius: RequiredField<number>;
            dash_length: RequiredField<number | null>;
            color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
        }>;
        angle_measurement: SimpleParamsSchema<{
            a: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            b: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            c: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            label_template: RequiredField<string>;
            label_size: RequiredField<number | null>;
            label_auto_size_scale: RequiredField<number>;
            label_auto_size_min: RequiredField<number>;
            label_color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            show_vector: RequiredField<boolean>;
            vector_color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            vector_radius: RequiredField<number>;
            show_section: RequiredField<boolean>;
            section_color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            section_radius: RequiredField<number | null>;
            section_radius_scale: RequiredField<number>;
        }>;
        label: SimpleParamsSchema<{
            position: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            text: RequiredField<string>;
            label_size: RequiredField<number>;
            label_color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            label_offset: RequiredField<number>;
        }>;
        ellipse: SimpleParamsSchema<{
            color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            as_circle: RequiredField<boolean>;
            center: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            major_axis: RequiredField<import("../mvs/param-types.js").Vector3 | null>;
            minor_axis: RequiredField<import("../mvs/param-types.js").Vector3 | null>;
            major_axis_endpoint: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT | null>;
            minor_axis_endpoint: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT | null>;
            radius_major: RequiredField<number | null>;
            radius_minor: RequiredField<number | null>;
            theta_start: RequiredField<number>;
            theta_end: RequiredField<number>;
            tooltip: RequiredField<string | null>;
        }>;
        ellipsoid: SimpleParamsSchema<{
            color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            center: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            major_axis: RequiredField<import("../mvs/param-types.js").Vector3 | null>;
            minor_axis: RequiredField<import("../mvs/param-types.js").Vector3 | null>;
            major_axis_endpoint: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT | null>;
            minor_axis_endpoint: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT | null>;
            radius: RequiredField<number | import("../mvs/param-types.js").Vector3 | null>;
            radius_extent: RequiredField<number | import("../mvs/param-types.js").Vector3 | null>;
            tooltip: RequiredField<string | null>;
        }>;
        box: SimpleParamsSchema<{
            center: RequiredField<import("../mvs/param-types.js").ComponentExpressionT | import("../mvs/param-types.js").Vector3 | import("../mvs/param-types.js").PrimitiveComponentExpressionT>;
            extent: RequiredField<import("../mvs/param-types.js").Vector3 | null>;
            show_faces: RequiredField<boolean>;
            face_color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            show_edges: RequiredField<boolean>;
            edge_radius: RequiredField<number>;
            edge_color: RequiredField<import("../mvs/param-types.js").ColorT | null>;
            tooltip: RequiredField<string | null>;
        }>;
    }>;
}, "root">;
/** Node kind in a `MolstarTree` */
export type MolstarKind = keyof typeof MolstarTreeSchema.nodes;
/** Node in a `MolstarTree` */
export type MolstarNode<TKind extends MolstarKind = MolstarKind> = NodeFor<typeof MolstarTreeSchema, TKind>;
/** Params for a specific node kind in a `MolstarTree` */
export type MolstarNodeParams<TKind extends MolstarKind> = ParamsOfKind<MolstarTree, TKind>;
/** Intermediate tree representation between `MVSTree` and a real Molstar state */
export type MolstarTree = TreeFor<typeof MolstarTreeSchema>;
/** Any subtree in a `MolstarTree` (e.g. its root doesn't need to be 'root') */
export type MolstarSubtree<TKind extends MolstarKind = MolstarKind> = SubtreeOfKind<MolstarTree, TKind>;
