import { type FullDatePart } from '../full-date/full-date-parts.js';
import { type DatePart, type FullDate, type TimePart } from '../full-date/full-date-shape.js';
import { type Timezone } from '../timezone/timezones.js';
/**
 * An object containing date and/or time parts or neither. Used for {@link combineDateParts}
 *
 * @category Internal
 */
export type MaybeDateParts<SpecificTimezone extends Timezone> = Partial<{
    [FullDatePart.Date]: DatePart<SpecificTimezone> | undefined | Partial<FullDate<SpecificTimezone>>;
    [FullDatePart.Time]: TimePart<SpecificTimezone> | undefined | Partial<FullDate<SpecificTimezone>>;
}>;
/**
 * A full date, time or date parts of a date, or undefined. Used for {@link combineDateParts}.
 *
 * @category Internal
 */
export type MaybeDatePart<SpecificTimezone extends Timezone> = FullDate<SpecificTimezone> | Partial<FullDate<SpecificTimezone>> | DatePart<SpecificTimezone> | TimePart<SpecificTimezone> | undefined;
export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: {
    [FullDatePart.Date]: DatePart<SpecificTimezone>;
    [FullDatePart.Time]: TimePart<SpecificTimezone>;
}): FullDate<SpecificTimezone>;
export declare function combineDateParts(maybeDateParts: {
    [FullDatePart.Date]?: undefined;
    [FullDatePart.Time]?: undefined;
}): undefined;
export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: {
    [FullDatePart.Date]: DatePart<SpecificTimezone>;
    [FullDatePart.Time]?: undefined;
}): DatePart<SpecificTimezone>;
export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: {
    [FullDatePart.Date]: DatePart<SpecificTimezone>;
    [FullDatePart.Time]?: TimePart<SpecificTimezone> | undefined | Partial<FullDate<SpecificTimezone>>;
}): FullDate<SpecificTimezone> | DatePart<SpecificTimezone>;
export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: {
    [FullDatePart.Date]?: undefined;
    [FullDatePart.Time]: TimePart<SpecificTimezone>;
}): TimePart<SpecificTimezone>;
export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: {
    [FullDatePart.Date]?: DatePart<SpecificTimezone> | undefined | Partial<FullDate<SpecificTimezone>>;
    [FullDatePart.Time]: TimePart<SpecificTimezone>;
}): FullDate<SpecificTimezone> | TimePart<SpecificTimezone>;
export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: MaybeDateParts<SpecificTimezone>): MaybeDatePart<SpecificTimezone>;
