import { AfterViewInit, ElementRef, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'; import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator, ValidatorFn } from '@angular/forms'; import { SimDateAdapter } from '@ngx-simple/core/datetime'; import { OnChangeType, OnTouchedType, ValidatorOnChange } from '@ngx-simple/core/types'; import { Subject } from 'rxjs'; import { DateSelectionModelChange, ExtractDateTypeFromSelection, SimDateSelectionModel } from './date-selection-model'; /** 可用于从日历中过滤出日期的方法。 */ export declare type DateFilterFn = (date: D | null) => boolean; export declare class SimDatepickerInputEvent { /** 对发出事件的`SimDatepickerInput`组件的引用 */ target: SimDatepickerInputBase; /** 引用与日期选择器`SimDatepickerInput`关联的元素。 */ targetElement: HTMLElement; /** 与时间选择器关联 `SimDatepickerInput` 的新值 */ value: D | null; constructor( /** 对发出事件的`SimDatepickerInput`组件的引用 */ target: SimDatepickerInputBase, /** 引用与日期选择器`SimDatepickerInput`关联的元素。 */ targetElement: HTMLElement); } export declare abstract class SimDatepickerInputBase> implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy, Validator { protected _elementRef: ElementRef; _dateAdapter: SimDateAdapter; /** 输入的值 */ get value(): D | null; set value(value: D | null); protected _model: SimDateSelectionModel | undefined; /** datepicker-input是否被禁用 */ get disabled(): boolean; set disabled(value: boolean); private _disabled; abstract format: string; abstract picker: string; /** 在此上触发`change`事件时发出`. */ readonly dateChange: EventEmitter>; /** 在此上触发`input`事件时发出 */ readonly dateInput: EventEmitter>; _controlValueAccessorChangeFn: OnChangeType; _onTouched: OnTouchedType; _validatorOnChange: ValidatorOnChange; protected abstract _validator: ValidatorFn | null; /** 当内部状态发生变化时发出 */ stateChanges: Subject; /** 值更改时(由于用户输入或程序更改)而发出 */ _valueChange: EventEmitter; private _valueChangesSubscription; /** 组件是否已初始化 */ private _isInitialized; /** 输入上设置的最后一个值是否有效。 */ protected _lastValueValid: boolean; /** 用于确定输入是否解析的表单控件验证器 */ private _parseValidator; /** 日期过滤器的表单控件验证器 */ private _filterValidator; /** 最小日期的表单控件验证器 */ private _minValidator; /** 最大日期的表单控件验证器 */ private _maxValidator; /** * 当选择模型发生变化时,将从不是当前datepicker输入的地方调用的回调函数 */ protected abstract _outsideValueChanged?: () => void; /** * 由于该值保留在输入中分配的模型上,在建立模型之前,我们可能会得到一个值。 * 这个属性会一直跟踪这个值,直到我们有地方给它赋值。 */ private _pendingValue; constructor(_elementRef: ElementRef, _dateAdapter: SimDateAdapter); ngOnChanges(changes: SimpleChanges): void; ngAfterViewInit(): void; ngOnDestroy(): void; registerOnValidatorChange(fn: () => void): void; validate(c: AbstractControl): ValidationErrors | null; writeValue(value: D): void; registerOnChange(fn: (value: any) => void): void; registerOnTouched(fn: () => void): void; setDisabledState(isDisabled: boolean): void; _onKeydown(event: KeyboardEvent): void; _onInput(value: string): void; _onChange(): void; _onClick(event: Event): void; /** 处理输入上的blur事件 */ _onBlur(): void; /** 使用输入注册一个日期选择模型 */ _registerModel(model: SimDateSelectionModel): void; /** 格式化值并将其设置在输入元素上 */ protected _formatValue(value: D | null): void; /** 根据picker初始化format */ private _initFormat; /** 为模型分配一个值 */ private _assignValue; /** 值是否被视为有效 */ private _isValidValue; /** 打开与时间选择器关联 `SimDatepickerInput` 的时间选择面板 */ protected abstract _openPopup(): void; /** 谓词,用于确定是否允许我们发出特定的更改事件。 */ protected abstract _canEmitChangeEvent(event: DateSelectionModelChange): boolean; /** 为输入的模型分配一个值 */ protected abstract _assignValueToModel(model: D | null): void; /** 将模型中的值转换为 */ protected abstract _getValueFromModel(modelValue: S): D | null; /** 获取输入的最小日期 用于验证 */ abstract _getMinDate(): D | null; /** 获取输入的最大日期 用于验证 */ abstract _getMaxDate(): D | null; /** 获取日期过滤器方法 用于验证 */ protected abstract _getDateFilter(): DateFilterFn | undefined; /** 获取基本验证器器 */ protected _getValidators(): ValidatorFn[]; /** * 检查父控件是否已禁用。这样做是为了让它可以被扩展这个的输入覆盖,这个输入可以被放置在一个可以禁用的组中。 */ protected _parentDisabled(): boolean; } /** * 检查'ngOnChanges'回调中的'SimpleChanges'对象是否有任何更改,考虑到日期对象。 */ export declare function dateInputsHaveChanged(changes: SimpleChanges, adapter: SimDateAdapter): boolean;