import * as zarr from 'zarrita';

/**
 * Model for an element of `Multiscale.axes`.
 *
 * See https://ngff.openmicroscopy.org/0.4/#axes-md.
 */
export declare interface Axis {
    name: string;
    type?: string | null;
    unit?: unknown;
    [k: string]: unknown;
}

/**
 * A single omero channel.
 */
export declare interface Channel {
    color: string;
    window: Window_2;
    lut?: string;
    active?: boolean;
    inverted?: boolean;
    [k: string]: unknown;
}

/**
 * An element of Multiscale.datasets.
 */
export declare interface Dataset {
    path: string;
    coordinateTransformations: [unknown] | [unknown, unknown];
    [k: string]: unknown;
}

export declare function getArray(store: zarr.FetchStore, path: string, zarr_version: 2 | 3 | undefined): Promise<zarr.Array<any>>;

export declare function getLuts(): {
    name: string;
    png: string;
}[];

export declare function getMinMaxValues(chunk2d: any): [number, number];

export declare function getMultiscale(store: zarr.FetchStore): Promise<{
    multiscale: Multiscale;
    omero: Omero | null | undefined;
    zarr_version: 2 | 3;
}>;

export declare function getMultiscaleWithArray(store: zarr.FetchStore | string, datasetIndex?: number): Promise<{
    arr: zarr.Array<any>;
    shapes: number[][] | undefined;
    multiscale: Multiscale;
    omero: Omero | null | undefined;
    scales: number[][];
    zarr_version: 2 | 3;
}>;

export declare function getSlices(activeChannelIndices: number[], shape: number[], axesNames: string[], indices: {
    [k: string]: number | [number, number] | undefined;
}): (number | Slice | undefined)[][];

/**
 * Model for the metadata of OME-Zarr data.
 *
 * See https://ngff.openmicroscopy.org/0.4/#image-layout.
 */
export declare interface ImageAttrs {
    /**
     * The multiscale datasets for this image
     *
     * @minItems 1
     */
    multiscales: [Multiscale, ...Multiscale[]];
    omero?: Omero | null;
    [k: string]: unknown;
}

export declare const LUTS: {
    path: string;
    name: string;
    rgb: number[][];
}[];

/**
 * An element of multiscales metadata.
 */
export declare interface Multiscale {
    axes: Axis[];
    /**
     * @minItems 1
     */
    datasets: [Dataset, ...Dataset[]];
    version?: "0.4" | null;
    coordinateTransformations?: [unknown] | [unknown, unknown] | null;
    metadata?: {
        [k: string]: unknown;
    };
    name?: unknown;
    type?: {
        [k: string]: unknown;
    };
    [k: string]: unknown;
}

/**
 * omero model.
 */
export declare interface Omero {
    channels: Channel[];
    rdefs: {
        defaultT: number;
        defaultZ: number;
        model: "greyscale" | "color";
    };
    [k: string]: unknown;
}

export declare function renderImage(arr: zarr.Array<any>, axes: Axis[], omero: Omero | null | undefined, sliceIndices?: {
    [k: string]: (number | [number, number] | undefined);
}, autoBoost?: boolean): Promise<string>;

export declare function renderThumbnail(store: zarr.FetchStore | string, targetSize?: number | undefined, autoBoost?: boolean, maxSize?: number): Promise<string>;

export declare function renderTo8bitArray(ndChunks: any, minMaxValues: Array<[number, number]>, colors: Array<[number, number, number]>, luts: Array<string | undefined> | undefined, inverteds: Array<boolean> | undefined, autoBoost?: boolean): Uint8ClampedArray;

declare interface Slice {
    start: number | null;
    stop: number | null;
    step: number | null;
}

/**
 * A single window.
 */
declare interface Window_2 {
    max: number;
    min: number;
    start?: number;
    end?: number;
    [k: string]: unknown;
}
export { Window_2 as Window }

export { }
