/**
 * @overload
 * @param {!TimeDelta} dtobj
 * @returns {!DtcalcTimedeltaReturn}
 *
 * @overload
 * @param {!DateTime} dtobj
 * @returns {!DtcalcDatetimeReturn}
 *
 * @overload
 * @param {!Date} dtobj
 * @returns {!DtcalcDateReturn}
 *
 * @overload
 * @param {!Time} dtobj
 * @returns {!DtcalcTimeReturn}
 *
 * @template T
 * @overload
 * @param {!T} dtobj
 * @returns {!DtcalcReturn<T>}
 */
export function dtcalc<T>(dtobj: TimeDelta): DtcalcTimedeltaReturn;
/**
 * @overload
 * @param {!TimeDelta} dtobj
 * @returns {!DtcalcTimedeltaReturn}
 *
 * @overload
 * @param {!DateTime} dtobj
 * @returns {!DtcalcDatetimeReturn}
 *
 * @overload
 * @param {!Date} dtobj
 * @returns {!DtcalcDateReturn}
 *
 * @overload
 * @param {!Time} dtobj
 * @returns {!DtcalcTimeReturn}
 *
 * @template T
 * @overload
 * @param {!T} dtobj
 * @returns {!DtcalcReturn<T>}
 */
export function dtcalc<T>(dtobj: DateTime): DtcalcDatetimeReturn;
/**
 * @overload
 * @param {!TimeDelta} dtobj
 * @returns {!DtcalcTimedeltaReturn}
 *
 * @overload
 * @param {!DateTime} dtobj
 * @returns {!DtcalcDatetimeReturn}
 *
 * @overload
 * @param {!Date} dtobj
 * @returns {!DtcalcDateReturn}
 *
 * @overload
 * @param {!Time} dtobj
 * @returns {!DtcalcTimeReturn}
 *
 * @template T
 * @overload
 * @param {!T} dtobj
 * @returns {!DtcalcReturn<T>}
 */
export function dtcalc<T>(dtobj: Date): DtcalcDateReturn;
/**
 * @overload
 * @param {!TimeDelta} dtobj
 * @returns {!DtcalcTimedeltaReturn}
 *
 * @overload
 * @param {!DateTime} dtobj
 * @returns {!DtcalcDatetimeReturn}
 *
 * @overload
 * @param {!Date} dtobj
 * @returns {!DtcalcDateReturn}
 *
 * @overload
 * @param {!Time} dtobj
 * @returns {!DtcalcTimeReturn}
 *
 * @template T
 * @overload
 * @param {!T} dtobj
 * @returns {!DtcalcReturn<T>}
 */
export function dtcalc<T>(dtobj: Time): DtcalcTimeReturn;
/**
 * @overload
 * @param {!TimeDelta} dtobj
 * @returns {!DtcalcTimedeltaReturn}
 *
 * @overload
 * @param {!DateTime} dtobj
 * @returns {!DtcalcDatetimeReturn}
 *
 * @overload
 * @param {!Date} dtobj
 * @returns {!DtcalcDateReturn}
 *
 * @overload
 * @param {!Time} dtobj
 * @returns {!DtcalcTimeReturn}
 *
 * @template T
 * @overload
 * @param {!T} dtobj
 * @returns {!DtcalcReturn<T>}
 */
export function dtcalc<T>(dtobj: T): DtcalcReturn<T>;
import { TimeDelta } from './datetime.js';
/**
 * @extends {DtcalcComparableReturn<TimeDelta>}
 */
declare class DtcalcTimedeltaReturn extends DtcalcComparableReturn<TimeDelta> {
    /**
     * @param {!TimeDelta} value
     */
    constructor(value: TimeDelta);
    /**
     * Add.
     *
     * @overload
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     *
     * @overload
     * @param {!DateTime} dtobj
     * @returns {!DtcalcDatetimeReturn}
     *
     * @overload
     * @param {!Date} dtobj
     * @returns {!DtcalcDateReturn}
     *
     * @overload
     * @param {!Time} dtobj
     * @returns {!DtcalcTimeReturn}
     *
     * @param {!TimeDelta | !Date | !Time | !DateTime} dtobj
     * @returns {!DtcalcTimedeltaReturn | !DtcalcDateReturn | !DtcalcTimeReturn | !DtcalcDatetimeReturn}
     */
    add(dtobj: TimeDelta): DtcalcTimedeltaReturn;
    /**
     * Add.
     *
     * @overload
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     *
     * @overload
     * @param {!DateTime} dtobj
     * @returns {!DtcalcDatetimeReturn}
     *
     * @overload
     * @param {!Date} dtobj
     * @returns {!DtcalcDateReturn}
     *
     * @overload
     * @param {!Time} dtobj
     * @returns {!DtcalcTimeReturn}
     *
     * @param {!TimeDelta | !Date | !Time | !DateTime} dtobj
     * @returns {!DtcalcTimedeltaReturn | !DtcalcDateReturn | !DtcalcTimeReturn | !DtcalcDatetimeReturn}
     */
    add(dtobj: DateTime): DtcalcDatetimeReturn;
    /**
     * Add.
     *
     * @overload
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     *
     * @overload
     * @param {!DateTime} dtobj
     * @returns {!DtcalcDatetimeReturn}
     *
     * @overload
     * @param {!Date} dtobj
     * @returns {!DtcalcDateReturn}
     *
     * @overload
     * @param {!Time} dtobj
     * @returns {!DtcalcTimeReturn}
     *
     * @param {!TimeDelta | !Date | !Time | !DateTime} dtobj
     * @returns {!DtcalcTimedeltaReturn | !DtcalcDateReturn | !DtcalcTimeReturn | !DtcalcDatetimeReturn}
     */
    add(dtobj: Date): DtcalcDateReturn;
    /**
     * Add.
     *
     * @overload
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     *
     * @overload
     * @param {!DateTime} dtobj
     * @returns {!DtcalcDatetimeReturn}
     *
     * @overload
     * @param {!Date} dtobj
     * @returns {!DtcalcDateReturn}
     *
     * @overload
     * @param {!Time} dtobj
     * @returns {!DtcalcTimeReturn}
     *
     * @param {!TimeDelta | !Date | !Time | !DateTime} dtobj
     * @returns {!DtcalcTimedeltaReturn | !DtcalcDateReturn | !DtcalcTimeReturn | !DtcalcDatetimeReturn}
     */
    add(dtobj: Time): DtcalcTimeReturn;
    /**
     * Subtract.
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     */
    sub(dtobj: TimeDelta): DtcalcTimedeltaReturn;
    /**
     * Negate.
     * @returns {!DtcalcTimedeltaReturn}
     */
    neg(): DtcalcTimedeltaReturn;
}
import { DateTime } from './datetime.js';
/**
 * @extends {DtcalcComparableReturn<DateTime>}
 */
declare class DtcalcDatetimeReturn extends DtcalcComparableReturn<DateTime> {
    /**
     * @param {!DateTime} value
     */
    constructor(value: DateTime);
    /**
     * Add.
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcDatetimeReturn}
     */
    add(dtobj: TimeDelta): DtcalcDatetimeReturn;
    /**
     * Subtract.
     *
     * @overload
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcDatetimeReturn}
     *
     * @overload
     * @param {!DateTime} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     *
     * @param {!TimeDelta | !DateTime} dtobj
     * @returns {!DtcalcDatetimeReturn | !DtcalcTimedeltaReturn}
     */
    sub(dtobj: TimeDelta): DtcalcDatetimeReturn;
    /**
     * Subtract.
     *
     * @overload
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcDatetimeReturn}
     *
     * @overload
     * @param {!DateTime} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     *
     * @param {!TimeDelta | !DateTime} dtobj
     * @returns {!DtcalcDatetimeReturn | !DtcalcTimedeltaReturn}
     */
    sub(dtobj: DateTime): DtcalcTimedeltaReturn;
}
import { Date } from './datetime.js';
/**
 * @extends {DtcalcComparableReturn<Date>}
 */
declare class DtcalcDateReturn extends DtcalcComparableReturn<Date> {
    /**
     * @param {!Date} value
     */
    constructor(value: Date);
    /**
     * Add.
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcDateReturn}
     */
    add(dtobj: TimeDelta): DtcalcDateReturn;
    /**
     * Subtract.
     *
     * @overload
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcDateReturn}
     *
     * @overload
     * @param {!Date} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     *
     * @param {!TimeDelta | !Date} dtobj
     * @returns {!DtcalcDateReturn | !DtcalcTimedeltaReturn}
     */
    sub(dtobj: TimeDelta): DtcalcDateReturn;
    /**
     * Subtract.
     *
     * @overload
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcDateReturn}
     *
     * @overload
     * @param {!Date} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     *
     * @param {!TimeDelta | !Date} dtobj
     * @returns {!DtcalcDateReturn | !DtcalcTimedeltaReturn}
     */
    sub(dtobj: Date): DtcalcTimedeltaReturn;
}
import { Time } from './datetime.js';
/**
 * @extends {DtcalcComparableReturn<Time>}
 */
declare class DtcalcTimeReturn extends DtcalcComparableReturn<Time> {
    /**
     * @param {!Time} value
     */
    constructor(value: Time);
    /**
     * Add.
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcTimeReturn}
     */
    add(dtobj: TimeDelta): DtcalcTimeReturn;
    /**
     * Subtract.
     *
     * @overload
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcTimeReturn}
     *
     * @overload
     * @param {!Time} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     *
     * @param {!TimeDelta | !Time} dtobj
     * @returns {!DtcalcTimeReturn | !DtcalcTimedeltaReturn}
     */
    sub(dtobj: TimeDelta): DtcalcTimeReturn;
    /**
     * Subtract.
     *
     * @overload
     * @param {!TimeDelta} dtobj
     * @returns {!DtcalcTimeReturn}
     *
     * @overload
     * @param {!Time} dtobj
     * @returns {!DtcalcTimedeltaReturn}
     *
     * @param {!TimeDelta | !Time} dtobj
     * @returns {!DtcalcTimeReturn | !DtcalcTimedeltaReturn}
     */
    sub(dtobj: Time): DtcalcTimedeltaReturn;
}
/**
 * @template T
 */
declare class DtcalcReturn<T> {
    /**
     * @param {T} value
     */
    constructor(value: T);
    _value: T;
    /**
     * @returns {T}
     */
    get value(): T;
}
/**
 * @template {!Date | !Time | !DateTime | !TimeDelta} T
 * @extends DtcalcReturn<T>
 */
declare class DtcalcComparableReturn<T extends Date | Time | DateTime | TimeDelta> extends DtcalcReturn<T> {
    /**
     * @param {T} value
     */
    constructor(value: T);
    /**
     * Equals.
     * @param {T} dtobj
     * @returns {!DtcalcReturn<boolean>}
     */
    eq(dtobj: T): DtcalcReturn<boolean>;
    /**
     * Not equals.
     * @param {T} dtobj
     * @returns {!DtcalcReturn<boolean>}
     */
    ne(dtobj: T): DtcalcReturn<boolean>;
    /**
     * Greater than.
     * @param {T} dtobj
     * @returns {!DtcalcReturn<boolean>}
     */
    gt(dtobj: T): DtcalcReturn<boolean>;
    /**
     * Lesser than.
     * @param {T} dtobj
     * @returns {!DtcalcReturn<boolean>}
     */
    lt(dtobj: T): DtcalcReturn<boolean>;
    /**
     * Greater or equals.
     * @param {T} dtobj
     * @returns {!DtcalcReturn<boolean>}
     */
    ge(dtobj: T): DtcalcReturn<boolean>;
    /**
     * Lesser or equals.
     * @param {T} dtobj
     * @returns {!DtcalcReturn<boolean>}
     */
    le(dtobj: T): DtcalcReturn<boolean>;
}
export {};
