import type React from 'react';
import type { AnyConfigurationModel } from '@jbrowse/core/configuration';
import type { Feature, Region } from '@jbrowse/core/util';
import type SceneGraph from '@jbrowse/core/util/layouts/SceneGraph';
export interface Glyph extends React.FC<{
    colorByCDS: boolean;
    feature: Feature;
    featureLayout: SceneGraph;
    selected?: boolean;
    config: AnyConfigurationModel;
    region: Region;
    bpPerPx: number;
    topLevel?: boolean;
    [key: string]: unknown;
}> {
    layOut?: (arg: FeatureLayOutArgs) => SceneGraph;
}
type LayoutRecord = [number, number, number, number];
export interface DisplayModel {
    getFeatureByID?: (arg0: string, arg1: string) => LayoutRecord;
    getFeatureOverlapping?: (blockKey: string, bp: number, y: number) => string | undefined;
    selectedFeatureId?: string;
    featureIdUnderMouse?: string;
    contextMenuFeature?: Feature;
}
export interface ExtraGlyphValidator {
    glyph: Glyph;
    validator: (feature: Feature) => boolean;
}
export declare function chooseGlyphComponent({ feature, extraGlyphs, config, }: {
    feature: Feature;
    config: AnyConfigurationModel;
    extraGlyphs?: ExtraGlyphValidator[];
}): Glyph;
interface BaseLayOutArgs {
    layout: SceneGraph;
    bpPerPx: number;
    reversed?: boolean;
    config: AnyConfigurationModel;
}
interface FeatureLayOutArgs extends BaseLayOutArgs {
    feature: Feature;
    extraGlyphs?: ExtraGlyphValidator[];
}
interface SubfeatureLayOutArgs extends BaseLayOutArgs {
    subfeatures: Feature[];
    extraGlyphs?: ExtraGlyphValidator[];
}
export declare function layOut({ layout, feature, bpPerPx, reversed, config, extraGlyphs, }: FeatureLayOutArgs): SceneGraph;
export declare function layOutFeature(args: FeatureLayOutArgs): SceneGraph;
export declare function layOutSubfeatures(args: SubfeatureLayOutArgs): void;
export declare function isUTR(feature: Feature): boolean;
export {};
