import { DateAdapter } from '../date-adapter';
import { IDateAdapter } from '../date-time';
import { IOccurrenceGenerator, IRunArgs } from '../interfaces';
import { RuleOption } from '../rule';
import { IOccurrencesArgs } from './occurrence.iterator';
export declare class CollectionIterator<T extends typeof DateAdapter, G extends ReadonlyArray<IOccurrenceGenerator<T>> = ReadonlyArray<IOccurrenceGenerator<T>>> {
    private iterable;
    private args;
    readonly granularity: CollectionsGranularity;
    readonly weekStart?: IDateAdapter.Weekday;
    readonly startDate: InstanceType<T> | null;
    private iterator;
    constructor(iterable: IOccurrenceGenerator<T>, args: ICollectionsRunArgs);
    [Symbol.iterator]: () => IterableIterator<Collection<T, ReadonlyArray<IOccurrenceGenerator<T>>>>;
    next(): IteratorResult<Collection<T, ReadonlyArray<IOccurrenceGenerator<T>>>>;
    /**
     * While `next()` and `[Symbol.iterator]` both share state,
     * `toArray()` does not share state and always returns the whole
     * collections array.
     */
    toArray(): Collection<T, ReadonlyArray<IOccurrenceGenerator<T>>>[];
    private normalizeDateOutput;
    private _run;
    private getPeriod;
    private incrementPeriod;
    private occurrenceIterator;
}
export declare class Collection<T extends typeof DateAdapter, G extends ReadonlyArray<IOccurrenceGenerator<T>> = ReadonlyArray<IOccurrenceGenerator<T>>> {
    readonly dates: (InstanceType<T> & {
        generators: G;
    })[];
    readonly granularity: CollectionsGranularity;
    readonly periodStart: InstanceType<T> & {
        generators: G;
    };
    readonly periodEnd: InstanceType<T> & {
        generators: G;
    };
    constructor(dates: (InstanceType<T> & {
        generators: G;
    })[], granularity: CollectionsGranularity, periodStart: InstanceType<T> & {
        generators: G;
    }, periodEnd: InstanceType<T> & {
        generators: G;
    });
}
export declare type CollectionsGranularity = 'INSTANTANIOUSLY' | RuleOption.Frequency;
export interface ICollectionsArgs<T extends typeof DateAdapter> extends IOccurrencesArgs<T> {
    granularity?: CollectionsGranularity;
    weekStart?: IDateAdapter.Weekday;
    incrementLinearly?: boolean;
}
export interface ICollectionsRunArgs extends IRunArgs {
    granularity?: CollectionsGranularity;
    weekStart?: IDateAdapter.Weekday;
    incrementLinearly?: boolean;
}
//# sourceMappingURL=collection.iterator.d.ts.map