import { TimeRange } from '../utils/date_time/time_range';
import { Dimension } from './dimension';
import { Query } from './query';
import { Value } from './value';
export declare const enum DimensionSegmentType {
    Time = "time",
    User = "user",
    Unknown = "unknown"
}
export declare abstract class DimensionSegment {
    dimension: Dimension;
    abstract type: DimensionSegmentType;
    key: string;
    abstract get title(): string;
    constructor(dimension: Dimension);
    static fromKey(key: string): DimensionSegment | void;
    abstract apply(query: Query): void;
    static combine(a: DimensionSegment[], b?: DimensionSegment[]): [DimensionSegment, DimensionSegment][] | [DimensionSegment][];
}
export declare namespace DimensionSegment {
    class Time extends DimensionSegment {
        range: TimeRange;
        type: DimensionSegmentType;
        constructor(dimension: Dimension, range: TimeRange);
        get title(): string;
        apply(query: Query): void;
    }
    class User extends DimensionSegment {
        user: Value.Reference.User;
        type: DimensionSegmentType;
        constructor(dimension: Dimension, user: Value.Reference.User);
        get title(): string;
        apply(query: Query): void;
    }
    class Unknown extends DimensionSegment {
        type: DimensionSegmentType;
        apply(): void;
        get title(): string;
    }
}
