import { Duration } from "./duration.js";
import { Time } from "./time.js";
import { TimeRangeNode } from "./types.js";
/**
 * Formatting options for spacing around a range's dash.
 */
export declare enum RangeDashFormat {
    Spaces = 0,
    NoSpaces = 1
}
/**
 * Options for configuring the range.
 */
export interface RangeOptions {
    /** The format for dashes in the time range. */
    format?: RangeDashFormat;
    /** The number of placeholder characters to use for an open range. */
    openRangePlaceholderCharCount?: number;
}
/**
 * A range of time with a start time and optional end time.
 */
export declare class Range {
    #private;
    /** The start time of the range. */
    start: Time;
    /** The format for dashes in the time range. */
    format: RangeDashFormat;
    /** The number of placeholder characters to use for an open range. */
    openRangePlaceholderCharCount: number;
    /**
     * Create a new range.
     * @throws {Error} The end time is before the start time.
     */
    constructor(
    /** The start time of the range. */
    start: Time, 
    /** The end time of the range. `null` if the range is open. */
    end?: Time | null, 
    /** Configuration options for the range */
    { format, openRangePlaceholderCharCount, }?: RangeOptions);
    /** @internal */
    static fromAST: (node: TimeRangeNode) => Range;
    /** The end time of the range. */
    get end(): Time | null;
    /**
     * @throws {Error} The end time is before the start time.
     */
    set end(value: Time | null);
    /**
     * Whether or not the range is considered open.
     */
    get open(): boolean;
    /**
     * Convert the range to a duration.
     */
    toDuration(): Duration;
    /**
     * Converts the range to minutes.
     * @returns 0 if an open range, otherwise the duration of the time range in minutes.
     */
    toMinutes(): number;
    /**
     * Render the range as a Klog string.
     */
    toString(): string;
    /**
     * Convert the range to a JSON object.
     */
    toJSON(): {
        start: Time;
        end: Time | null;
        format: RangeDashFormat;
        openRangePlaceholderCharCount: number;
    };
}
