import { Overlay, ScrollStrategy } from '@angular/cdk/overlay'; import { ComponentPortal } from '@angular/cdk/portal'; import { ElementRef, EventEmitter, InjectionToken, NgZone, OnChanges, OnDestroy, SimpleChanges, ViewContainerRef } from '@angular/core'; import { ThemePalette } from '@ngx-simple/core/common-behaviors'; import { SimDateAdapter } from '@ngx-simple/core/datetime'; import { NgClassInterface, SafeAny } from '@ngx-simple/core/types'; import { Observable, Subject } from 'rxjs'; import { SimCalendarCellClassFunction } from './calendar-body.component'; import { SimCalendarView } from './calendar.component'; import { ExtractDateTypeFromSelection, SimDateSelectionModel } from './date-selection-model'; import { DateFilterFn } from './datepicker-input-base'; /** 可与datepicker关联的表单控件 */ export interface SimDatepickerControl { getStartValue(): D | null; getThemePalette(): ThemePalette; min: D | null; max: D | null; disabled: boolean; dateFilter: DateFilterFn; picker: 'year' | 'month' | 'week' | 'date' | 'datetime'; getConnectedOverlayOrigin(): ElementRef; stateChanges: Observable; } /** 注入令牌,用于确定在日历打开时的滚动处理。 */ export declare const SIM_DATEPICKER_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>; export declare function SIM_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy; /** datepicker下拉菜单在X轴上的可能位置 */ export declare type DatepickerDropdownPositionX = 'start' | 'end'; /** datepicker下拉菜单在Y轴上可能位置 */ export declare type DatepickerDropdownPositionY = 'above' | 'below'; export declare const SIM_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER: { provide: InjectionToken<() => ScrollStrategy>; deps: (typeof Overlay)[]; useFactory: typeof SIM_DATEPICKER_SCROLL_STRATEGY_FACTORY; }; /** 日期选择器的基类 */ export declare abstract class SimDatepickerBase, S, D = ExtractDateTypeFromSelection> implements OnDestroy, OnChanges { private _overlay; private _ngZone; protected _viewContainerRef: ViewContainerRef; protected _dateAdapter: SimDateAdapter; private _model; /** 最初打开日历的日期 */ get startAt(): D | null; set startAt(value: D | null); private _startAt; /** 日历应该开始的视图 */ startView: SimCalendarView; /** 是否展示“今天”按钮 */ today: boolean; /** 在日期选择器的日历上使用的调色板 */ get color(): ThemePalette; set color(value: ThemePalette); _color: ThemePalette; /** 是否禁用日期选择器弹出窗口 */ get disabled(): boolean; set disabled(value: boolean); private _disabled; /** * 在多年视图中发出选定的年份。这并不意味着对所选日期的更改。 */ readonly yearSelected: EventEmitter; /** * 在年度视图中发出选定的月份。这并不意味着对所选日期的更改。 */ readonly monthSelected: EventEmitter; /** * 在年度视图中发出选定的周。这并不意味着对所选日期的更改。 */ readonly weekSelected: EventEmitter; /** * 在时间视图中发出选定的时间。这并不意味着对所选日期的更改。 */ readonly timeSelected: EventEmitter; /** * 在当前视图更改时发出 */ readonly viewChanged: EventEmitter; /** 要传递给日期选择器面板的类。 支持与ngClass相同的语法 */ panelClass: NgClassInterface; /** 可用于将自定义CSS类添加到日期的函数 */ dateClass: SimCalendarCellClassFunction; /** 打开日期选择器面板后发出事件 */ opened: EventEmitter; /** 关闭日期选择器面板后发出事件 */ closed: EventEmitter; /** 与此datepicker关联的 */ _datepickerInput: C; /** 当日期选择器的状态更改时发出 */ readonly _stateChanges: Subject; private _scrollStrategy; private _document; /** 日期面板是否打开 */ private _panelOpen; private _inputStateChanges; /** 打开日期选择器之前聚焦的元素 */ private _focusedElementBeforeOpen; /** 当日历作为弹出窗口打开时,对覆盖层的引用 */ private _popupRef; /** 对在弹出模式中实例化的组件的引用 */ private _popupComponentRef; constructor(_overlay: Overlay, _ngZone: NgZone, _viewContainerRef: ViewContainerRef, scrollStrategy: any, _dateAdapter: SimDateAdapter, document: SafeAny, _model: SimDateSelectionModel); ngOnChanges(changes: SimpleChanges): void; ngOnDestroy(): void; /** 在多年视图中发出选定的年份 */ _selectYear(normalizedYear: D): void; /** 在年度视图中发出选定的月份 */ _selectMonth(normalizedMonth: D): void; /** 视图发出改变 */ _viewChanged(view: SimCalendarView): void; /** 可选择的最小日期 */ _getMinDate(): D | null; /** 可选择的最大日期 */ _getMaxDate(): D | null; /** 可选择过滤后的日期 */ _getDateFilter(): DateFilterFn; /** * 使用此日期选择器注册simDatepickerInput * @param input 要向此datepicker注册的 simDatepickerInput * @returns simDatepickerInput应该连接到的选择模型 */ _registerInput(input: C): SimDateSelectionModel; open(): void; close(): void; protected abstract createPortal(): ComponentPortal; /** 根据picker初始化开始视图 */ private _initStartView; private _openAsPopup; private _createPopup; /** 销毁当前弹出选择器面板浮层 */ private _destroyPopup; }