import { type DateTimeGranularity } from '../../utils';
import { type Ele as CalendarBaseEle, type Weeks } from '../calendar';
import { Ele as HhMmSsMsSelectorEle } from '../hhmmss-ms-list-grp/selector';
import { type BaseAttrs, type BaseEmits, UiBase } from '../web-component-base';
import { Ele as YyyyMmNavEle } from '../yyyymm-nav';
export declare const granularityList: readonly ["millisecond", "second", "minute", "hour", "day", "month", "year"];
export type Granularity = DateTimeGranularity;
export interface Attrs extends BaseAttrs {
    /**
     * The start time of the calendar display range.
     * @type {`string | number`} A value that can be passed to the Date constructor.
     * @default Date.now()
     */
    'time-start'?: string | number;
    /**
     * The end time of the calendar display range.
     * @type {`string | number`} A value that can be passed to the Date constructor.
     * @default 'time-start'
     */
    'time-end': string | number;
    /**
     * 选择器的粒度，表示最小可选的时间单位。默认为 millisecond。
     * 例如设置为 'minute'，则表示只能选择到分钟，秒和毫秒将被忽略。忽略的时间单位视情况重置为 0 或 23 或 59 或 999。
     */
    'min-granularity'?: Granularity;
    /**
     * Set which day of the week is the first day.
     * @type `'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'`
     * @default 'sun'
     */
    'week-start-at'?: Weeks;
}
export interface Emits extends BaseEmits {
    change: {
        oldStartTime: Date;
        oldEndTime: Date;
        newStartTime: Date;
        newEndTime: Date;
    };
}
/**
 * 时间段选择器（两个日历）
 *
 * 存在一个 timeFormatter 方法，可以重写该方法以自定义时分秒毫秒的回显格式。
 */
export declare class Ele extends UiBase<Attrs, Emits> {
    static readonly tagName: "dt-period-selector";
    protected static _style: string;
    protected static _template: string;
    static get observedAttributes(): string[];
    get timeStart(): number | string | Date;
    set timeStart(val: number | string | Date);
    get timeEnd(): number | string | Date;
    set timeEnd(val: number | string | Date);
    get weekStartAt(): Weeks;
    set weekStartAt(val: Weeks);
    get minGranularity(): Granularity;
    set minGranularity(val: Granularity);
    get _staticEls(): {
        readonly allNav: any[];
        readonly startNav: YyyyMmNavEle;
        readonly endNav: YyyyMmNavEle;
        readonly calendars: any[];
        readonly startCalendar: CalendarBaseEle;
        readonly endCalendar: CalendarBaseEle;
        readonly timeSelectors: any[];
        readonly startTimeSelector: HhMmSsMsSelectorEle;
        readonly endTimeSelector: HhMmSsMsSelectorEle;
    };
    private _selectedDate;
    connectedCallback(): void;
    protected _onScreenSizeChanged(isSmall: boolean): void;
    protected _onAttrChanged(name: string, oldValue: string | null, newValue: string | null): void;
    private _updateNavCtrlBtn;
    private _render;
    private _updateDateEcho;
    private _getTimeSelectorMs;
    private _updateDatePoint;
    private _onCalendarSelect;
    private _onCalendarItemHover;
    abortSelecting(): void;
    private _onNavChange;
    private _onNavOpenToggle;
    private _onTimeSelectorChange;
    showCalendarDatePoint(): void;
    dateFormatter: (time: Date, minGranularity: Granularity, isSmall: boolean) => string;
    get timeFormatter(): HhMmSsMsSelectorEle["timeFormatter"];
    set timeFormatter(fn: HhMmSsMsSelectorEle['timeFormatter']);
}
