import { TimeSegmentType } from '../utils/date_time/time_segment_type';
import { TimeUnit } from '../utils/date_time/time_unit';
import { DimensionSegment, DimensionSegmentType } from './dimension_segment';
import { Value } from './value';
import { Dimension } from './dimension';
import { Query } from './query';
export declare abstract class DimensionFunction {
    abstract type: DimensionSegmentType;
    abstract segment(dimension: Dimension, query: Query): DimensionSegment[];
}
export declare namespace DimensionFunction {
    class Time extends DimensionFunction {
        quantity: number;
        unit: TimeUnit;
        timeSegmentType: TimeSegmentType;
        type: DimensionSegmentType;
        constructor(quantity: number, unit: TimeUnit, timeSegmentType: TimeSegmentType);
        segment(dimension: Dimension, query: Query): DimensionSegment.Time[];
    }
    class User extends DimensionFunction {
        users: Value.Reference.User[];
        type: DimensionSegmentType;
        constructor(users: Value.Reference.User[]);
        segment(dimension: Dimension): DimensionSegment.User[];
    }
    class Unknown extends DimensionFunction {
        type: DimensionSegmentType;
        segment(): DimensionSegment[];
    }
}
