/**
 * @typedef {Partial<Record<import("../../../spec/channel.js").PrimaryPositionalChannel, number[]>>} DataReadinessRequest
 */
/**
 * @typedef {{isDataReadyForDomain: (request: DataReadinessRequest) => boolean}} DataReadinessCheckable
 */
/**
 * Base class for data sources that listen a domain and propagate data lazily.
 *
 * @abstract
 * @implements {DataReadinessCheckable}
 */
export default class SingleAxisLazySource extends DataSource implements DataReadinessCheckable {
    /**
     * @param {import("../../../view/view.js").default} view
     * @param {import("../../../spec/channel.js").PrimaryPositionalChannel} channel
     */
    constructor(view: import("../../../view/view.js").default, channel: import("../../../spec/channel.js").PrimaryPositionalChannel);
    /**
     * Has to be resolved before any data can be requested upon domain changes.
     * @protected
     */
    protected initializedPromise: Promise<void>;
    /**
     * @type {number[] | undefined}
     * @protected
     */
    protected _lastLoadedDomain: number[] | undefined;
    /** @type {import("../../../spec/channel.js").PrimaryPositionalChannel}  */
    channel: import("../../../spec/channel.js").PrimaryPositionalChannel;
    scaleResolution: import("../../../scales/scaleResolution.js").default;
    /**
     * Convenience getter for genome.
     *
     * @protected
     */
    protected get genome(): import("../../../genome/genome.js").default;
    /**
     * Listen to the domain change event and update data when the covered windows change.
     *
     * @param {number[]} domain Linearized domain
     * @param {import("../../../spec/genome.js").ChromosomalLocus[]} complexDomain Chrom/Pos domain
     * @abstract
     */
    onDomainChanged(domain: number[], complexDomain: import("../../../spec/genome.js").ChromosomalLocus[]): void;
    /**
     * TODO: Get rid of this method.
     * Rendering should be requested by the collector.
     *
     * @protected
     */
    protected requestRender(): void;
    /**
     * Resets the data flow and propagates the data, which should be an array of data chunks.
     * A chunk is an ordinary array of data objects. Typically all data objects are stored
     * in a single chunk, but sometimes they may be split into multiple chunks, e.g., one per
     * chromosome.
     *
     * @param {import("../../flowNode.js").Datum[][]} chunks An array of data chunks.
     * @protected
     */
    protected publishData(chunks: import("../../flowNode.js").Datum[][]): void;
    /**
     * @param {DataReadinessRequest} request
     * @returns {boolean}
     */
    isDataReadyForDomain(request: DataReadinessRequest): boolean;
}
export type DataReadinessRequest = Partial<Record<import("../../../spec/channel.js").PrimaryPositionalChannel, number[]>>;
export type DataReadinessCheckable = {
    isDataReadyForDomain: (request: DataReadinessRequest) => boolean;
};
import DataSource from "../dataSource.js";
//# sourceMappingURL=singleAxisLazySource.d.ts.map