@imihai/angular-datetime-picker 22.2.0 → 22.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"imihai-angular-datetime-picker.mjs","sources":["../../../projects/picker/src/lib/date-time/date-time-picker-trigger.directive.ts","../../../projects/picker/src/lib/date-time/adapter/date-time-format.class.ts","../../../projects/picker/src/lib/date-time/adapter/date-time-adapter.class.ts","../../../projects/picker/src/lib/date-time/date-time.class.ts","../../../projects/picker/src/lib/date-time/date-time-picker-intl.service.ts","../../../projects/picker/src/lib/date-time/calendar-body.component.ts","../../../projects/picker/src/lib/date-time/calendar-body.component.html","../../../projects/picker/src/lib/date-time/options-provider.ts","../../../projects/picker/src/lib/date-time/calendar-multi-year-view.component.ts","../../../projects/picker/src/lib/date-time/calendar-multi-year-view.component.html","../../../projects/picker/src/lib/date-time/calendar-year-view.component.ts","../../../projects/picker/src/lib/date-time/calendar-year-view.component.html","../../../projects/picker/src/lib/date-time/calendar-month-view.component.ts","../../../projects/picker/src/lib/date-time/calendar-month-view.component.html","../../../projects/picker/src/lib/date-time/calendar.component.ts","../../../projects/picker/src/lib/date-time/calendar.component.html","../../../projects/picker/src/lib/date-time/timer-box.component.ts","../../../projects/picker/src/lib/date-time/timer-box.component.html","../../../projects/picker/src/lib/date-time/timer.component.ts","../../../projects/picker/src/lib/date-time/timer.component.html","../../../projects/picker/src/lib/date-time/date-time-picker-container.component.ts","../../../projects/picker/src/lib/date-time/date-time-picker-container.component.html","../../../projects/picker/src/lib/dialog/dialog-config.class.ts","../../../projects/picker/src/lib/dialog/dialog-ref.class.ts","../../../projects/picker/src/lib/dialog/dialog-container.component.ts","../../../projects/picker/src/lib/dialog/dialog-container.component.html","../../../projects/picker/src/lib/utils/object.utils.ts","../../../projects/picker/src/lib/utils/index.ts","../../../projects/picker/src/lib/dialog/dialog.service.ts","../../../projects/picker/src/lib/date-time/date-time-picker.component.ts","../../../projects/picker/src/lib/date-time/date-time-picker.component.html","../../../projects/picker/src/lib/date-time/date-time-picker-input.directive.ts","../../../projects/picker/src/lib/date-time/numberedFixLen.pipe.ts","../../../projects/picker/src/lib/date-time/date-time-inline.component.ts","../../../projects/picker/src/lib/date-time/date-time-inline.component.html","../../../projects/picker/src/lib/dialog/dialog.module.ts","../../../projects/picker/src/lib/date-time/date-time.module.ts","../../../projects/picker/src/lib/date-time/adapter/luxon-date-time-adapter.class.ts","../../../projects/picker/src/lib/date-time/adapter/luxon-date-time-format.class.ts","../../../projects/picker/src/lib/date-time/adapter/luxon-date-time.module.ts","../../../projects/picker/src/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.ts","../../../projects/picker/src/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.ts","../../../projects/picker/src/public_api.ts","../../../projects/picker/src/imihai-angular-datetime-picker.ts"],"sourcesContent":["/**\r\n * date-time-picker-trigger.directive\r\n */\r\n\r\n\r\nimport {\r\n AfterContentInit,\r\n ChangeDetectorRef,\r\n Directive,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges\r\n} from '@angular/core';\r\nimport { OwlDateTimeComponent } from './date-time-picker.component';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { merge, EMPTY, Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[owlDateTimeTrigger]',\r\n standalone: false,\r\n host: {\r\n '(click)': 'handleClickOnHost($event)',\r\n '[class.owl-dt-trigger-disabled]': 'owlDTTriggerDisabledClass'\r\n }\r\n})\r\nexport class OwlDateTimeTriggerDirective<T> implements OnInit, OnChanges, AfterContentInit, OnDestroy {\r\n\r\n @Input('owlDateTimeTrigger') dtPicker: OwlDateTimeComponent<T>;\r\n\r\n private _disabled: boolean;\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled === undefined ? !!this.dtPicker?.disabled : !!this._disabled;\r\n }\r\n\r\n set disabled( value: boolean ) {\r\n this._disabled = coerceBooleanProperty(value);\r\n }\r\n\r\n get owlDTTriggerDisabledClass(): boolean {\r\n return this.disabled;\r\n }\r\n\r\n private stateChanges = Subscription.EMPTY;\r\n\r\n constructor( protected changeDetector: ChangeDetectorRef ) {\r\n }\r\n\r\n public ngOnInit(): void {\r\n }\r\n\r\n public ngOnChanges( changes: SimpleChanges ) {\r\n if (changes.dtPicker) {\r\n this.watchStateChanges();\r\n }\r\n }\r\n\r\n public ngAfterContentInit() {\r\n this.watchStateChanges();\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.stateChanges.unsubscribe();\r\n }\r\n\r\n public handleClickOnHost( event: Event ): void {\r\n if (this.dtPicker && !this.disabled) {\r\n this.dtPicker.open();\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n private watchStateChanges(): void {\r\n this.stateChanges.unsubscribe();\r\n\r\n const inputDisabled = this.dtPicker && this.dtPicker.dtInput ?\r\n this.dtPicker.dtInput.disabledChange.asObservable() : EMPTY;\r\n\r\n const pickerDisabled = this.dtPicker ?\r\n this.dtPicker.disabledChange.asObservable() : EMPTY;\r\n\r\n this.stateChanges = merge(pickerDisabled, inputDisabled)\r\n .subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n}\r\n","/**\r\n * date-time-format.class\r\n */\r\n\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport interface OwlDateTimeFormats {\r\n parseInput: any;\r\n fullPickerInput: any;\r\n datePickerInput: any;\r\n timePickerInput: any;\r\n monthYearLabel: any;\r\n dateA11yLabel: any;\r\n monthYearA11yLabel: any;\r\n}\r\n\r\n/** InjectionToken для переопределения формата даты и времени */\r\nexport const OWL_DATE_TIME_FORMATS = new InjectionToken<OwlDateTimeFormats>('OWL_DATE_TIME_FORMATS');\r\n","/**\r\n * date-time-adapter.class\r\n */\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { inject, InjectionToken, LOCALE_ID } from '@angular/core';\r\n\r\n/** InjectionToken для переопределения локали компонента выбора даты и времени */\r\nexport const OWL_DATE_TIME_LOCALE = new InjectionToken<string>(\r\n 'OWL_DATE_TIME_LOCALE',\r\n {\r\n providedIn: 'root',\r\n factory: OWL_DATE_TIME_LOCALE_FACTORY\r\n }\r\n);\r\n\r\n/** @docs-private */\r\nexport function OWL_DATE_TIME_LOCALE_FACTORY(): string {\r\n return inject(LOCALE_ID);\r\n}\r\n\r\n/** Провайдер токена OWL_DATE_TIME_LOCALE */\r\nexport const OWL_DATE_TIME_LOCALE_PROVIDER = {\r\n provide: OWL_DATE_TIME_LOCALE,\r\n useExisting: LOCALE_ID\r\n};\r\n\r\nexport abstract class DateTimeAdapter<T> {\r\n /** Локаль для всех дат */\r\n protected locale: any;\r\n\r\n /** Поток уведомлений об изменении локали */\r\n protected _localeChanges = new Subject<string>();\r\n get localeChanges(): Observable<string> {\r\n return this._localeChanges;\r\n }\r\n\r\n\tpublic firstMonthOfTheYear: number = 0;\r\n\tpublic firstDayOfTheWeek: number = 0;\r\n\r\n /** Количество миллисекунд в сутках */\r\n protected readonly millisecondsInDay = 86400000;\r\n\r\n /** Количество миллисекунд в минуте */\r\n protected readonly millisecondsInMinute = 60000;\r\n\r\n /**\r\n * Возвращает год указанной даты\r\n */\r\n abstract getYear(date: T): number;\r\n\r\n /**\r\n * Возвращает индекс месяца указанной даты\r\n * 0 -- январь\r\n * 11 -- декабрь\r\n * */\r\n abstract getMonth(date: T): number;\r\n\r\n /**\r\n * Возвращает день недели указанной даты\r\n * 0 -- воскресенье\r\n * 6 -- суббота\r\n * */\r\n abstract getDay(date: T): number;\r\n\r\n /**\r\n * Возвращает число месяца указанной даты\r\n */\r\n abstract getDate(date: T): number;\r\n\r\n /**\r\n * Возвращает часы указанной даты\r\n */\r\n abstract getHours(date: T): number;\r\n\r\n /**\r\n * Возвращает минуты указанной даты\r\n */\r\n abstract getMinutes(date: T): number;\r\n\r\n /**\r\n * Возвращает секунды указанной даты\r\n */\r\n abstract getSeconds(date: T): number;\r\n\r\n /**\r\n * Возвращает временную метку указанной даты в миллисекундах\r\n */\r\n abstract getTime(date: T): number;\r\n\r\n /**\r\n * Возвращает количество дней в месяце указанной даты\r\n */\r\n abstract getNumDaysInMonth(date: T): number;\r\n\r\n /**\r\n * Возвращает разницу между указанными датами в календарных днях\r\n * Если dateLeft раньше dateRight, возвращает отрицательное значение\r\n * Если dateLeft позже dateRight, возвращает положительное значение\r\n */\r\n abstract differenceInCalendarDays(dateLeft: T, dateRight: T): number;\r\n\r\n /**\r\n * Возвращает строковое представление года указанной даты\r\n */\r\n abstract getYearName(date: T): string;\r\n\r\n /**\r\n * Возвращает список названий месяцев\r\n */\r\n abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\r\n\r\n /**\r\n * Возвращает список названий дней недели\r\n */\r\n abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\r\n\r\n /**\r\n * Возвращает список строковых представлений чисел месяца\r\n */\r\n abstract getDateNames(): string[];\r\n\r\n /**\r\n * Возвращает дату в виде строки по стандарту ISO\r\n */\r\n abstract toIso8601(date: T): string;\r\n\r\n /**\r\n * Проверяет равенство указанных дат\r\n */\r\n abstract isEqual(dateLeft: T, dateRight: T): boolean;\r\n\r\n /**\r\n * Проверяет, относятся ли указанные даты к одному дню\r\n */\r\n abstract isSameDay(dateLeft: T, dateRight: T): boolean;\r\n\r\n /**\r\n * Проверяет корректность указанной даты\r\n */\r\n abstract isValid(date: T): boolean;\r\n\r\n /**\r\n * Возвращает экземпляр некорректной даты\r\n */\r\n abstract invalid(): T;\r\n\r\n /**\r\n * Проверяет, считает ли этот DateTimeAdapter указанный объект экземпляром даты\r\n */\r\n abstract isDateInstance(obj: any): boolean;\r\n\r\n /**\r\n * Добавляет указанное количество лет к дате\r\n */\r\n abstract addCalendarYears(date: T, amount: number): T;\r\n\r\n /**\r\n * Добавляет указанное количество месяцев к дате\r\n */\r\n abstract addCalendarMonths(date: T, amount: number): T;\r\n\r\n /**\r\n * Добавляет указанное количество дней к дате\r\n */\r\n abstract addCalendarDays(date: T, amount: number): T;\r\n\r\n /**\r\n * Устанавливает часы указанной даты\r\n */\r\n abstract setHours(date: T, amount: number): T;\r\n\r\n /**\r\n * Устанавливает минуты указанной даты\r\n */\r\n abstract setMinutes(date: T, amount: number): T;\r\n\r\n /**\r\n * Устанавливает секунды указанной даты\r\n */\r\n abstract setSeconds(date: T, amount: number): T;\r\n\r\n /**\r\n * Создаёт дату с указанными годом, месяцем, числом, часами, минутами и секундами\r\n * Месяц и число должны находиться в допустимых пределах\r\n */\r\n abstract createDate(year: number, month: number, date: number): T;\r\n abstract createDate(\r\n year: number,\r\n month: number,\r\n date: number,\r\n hours: number,\r\n minutes: number,\r\n seconds: number\r\n ): T;\r\n\r\n /**\r\n * Создаёт копию указанной даты\r\n */\r\n abstract clone(date: T): T;\r\n\r\n /**\r\n * Возвращает текущие дату и время\r\n * */\r\n abstract now(): T;\r\n\r\n /**\r\n * Форматирует дату в строку по указанному формату\r\n */\r\n abstract format(date: T, displayFormat: any): string;\r\n\r\n /**\r\n * Преобразует введённое пользователем значение в объект даты\r\n */\r\n abstract parse(value: any, parseFormat: any): T | null;\r\n\r\n /**\r\n * Сравнивает две указанные даты\r\n * 1, если первая дата позже второй;\r\n * -1, если первая дата раньше второй;\r\n * 0, если даты равны\r\n * */\r\n compare(first: T, second: T): number {\r\n if (!this.isValid(first) || !this.isValid(second)) {\r\n throw Error('JSNativeDate: Cannot compare invalid dates.');\r\n }\r\n\r\n const dateFirst = this.clone(first);\r\n const dateSecond = this.clone(second);\r\n\r\n const diff = this.getTime(dateFirst) - this.getTime(dateSecond);\r\n\r\n if (diff < 0) {\r\n return -1;\r\n } else if (diff > 0) {\r\n return 1;\r\n } else {\r\n // Возвращает 0 при diff === 0 и NaN при diff === NaN\r\n return diff;\r\n }\r\n }\r\n\r\n /**\r\n * Сравнивает годы двух указанных дат\r\n * 1, если год первой даты больше года второй;\r\n * -1, если год первой даты меньше года второй;\r\n * 0, если обе даты относятся к одному году\r\n * */\r\n compareYear(first: T, second: T): number {\r\n if (!this.isValid(first) || !this.isValid(second)) {\r\n throw Error('JSNativeDate: Cannot compare invalid dates.');\r\n }\r\n\r\n const yearLeft = this.getYear(first);\r\n const yearRight = this.getYear(second);\r\n\r\n const diff = yearLeft - yearRight;\r\n\r\n if (diff < 0) {\r\n return -1;\r\n } else if (diff > 0) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n /**\r\n * Пытается десериализовать значение в корректный объект даты\r\n * В отличие от разбора\r\n * пользовательского ввода, deserialize принимает только однозначные форматы, не зависящие\r\n * от локали, например ISO 8601\r\n * По умолчанию метод ничего не преобразует, а проверяет,\r\n * что значение уже является корректным объектом даты или null\r\n * Компонент выбора даты\r\n * использует этот метод для входных значений, представляющих даты\r\n * Переопределение\r\n * метода позволяет передавать в такие свойства значения прямо с сервера,\r\n * если реализовать десериализацию формата, используемого сервером\r\n */\r\n deserialize(value: any): T | null {\r\n if (\r\n value == null ||\r\n (this.isDateInstance(value) && this.isValid(value))\r\n ) {\r\n return value;\r\n }\r\n return this.invalid();\r\n }\r\n\r\n /**\r\n * Устанавливает локаль для всех дат\r\n */\r\n setLocale(locale: string) {\r\n this.locale = locale;\r\n this._localeChanges.next(locale);\r\n }\r\n\r\n /**\r\n * Возвращает локаль для всех дат\r\n * */\r\n getLocale() {\r\n return this.locale;\r\n }\r\n\r\n /**\r\n * Ограничивает дату минимальным и максимальным значениями\r\n */\r\n clampDate(date: T, min?: T | null, max?: T | null): T {\r\n if (min != null && this.compare(date, min) < 0) {\r\n return min;\r\n }\r\n if (max != null && this.compare(date, max) > 0) {\r\n return max;\r\n }\r\n return date;\r\n }\r\n}\r\n","/**\r\n * date-time.class\r\n */\r\nimport {EventEmitter, Inject, Input, Optional, Directive} from '@angular/core';\r\nimport {\r\n coerceBooleanProperty,\r\n coerceNumberProperty\r\n} from '@angular/cdk/coercion';\r\nimport {DateTimeAdapter} from './adapter/date-time-adapter.class';\r\nimport {\r\n OWL_DATE_TIME_FORMATS,\r\n OwlDateTimeFormats\r\n} from './adapter/date-time-format.class';\r\n\r\nlet nextUniqueId = 0;\r\n\r\nexport type PickerType = 'both' | 'calendar' | 'timer';\r\n\r\nexport type PickerMode = 'popup' | 'dialog' | 'inline';\r\n\r\nexport type SelectMode = 'single' | 'range' | 'rangeFrom' | 'rangeTo';\r\n\r\nexport enum DateView {\r\n MONTH = 'month',\r\n YEAR = 'year',\r\n MULTI_YEARS = 'multi-years'\r\n}\r\n\r\nexport type DateViewType = DateView.MONTH | DateView.YEAR | DateView.MULTI_YEARS;\r\n\r\n@Directive()\r\nexport abstract class OwlDateTime<T> {\r\n /**\r\n * Нужно ли показывать поле секунд\r\n */\r\n private _showSecondsTimer = false;\r\n @Input()\r\n get showSecondsTimer(): boolean {\r\n return this._showSecondsTimer;\r\n }\r\n\r\n set showSecondsTimer(val: boolean) {\r\n this._showSecondsTimer = coerceBooleanProperty(val);\r\n }\r\n\r\n /**\r\n * Используется ли 12-часовой формат времени\r\n */\r\n private _hour12Timer = false;\r\n @Input()\r\n get hour12Timer(): boolean {\r\n return this._hour12Timer;\r\n }\r\n\r\n set hour12Timer(val: boolean) {\r\n this._hour12Timer = coerceBooleanProperty(val);\r\n }\r\n\r\n /**\r\n * Начальное представление календаря\r\n */\r\n @Input()\r\n startView: DateViewType = DateView.MONTH;\r\n\r\n /**\r\n * Нужно ли показывать номера недель в календаре\r\n * */\r\n @Input()\r\n showCalendarWeeks = false;\r\n\r\n /**\r\n * Нужно ли показывать только представления года и нескольких лет\r\n */\r\n @Input()\r\n yearOnly = false;\r\n\r\n /**\r\n * Нужно ли показывать только представление нескольких лет\r\n */\r\n @Input()\r\n multiyearOnly = false;\r\n\r\n /**\r\n * Количество часов за один шаг\r\n */\r\n private _stepHour = 1;\r\n @Input()\r\n get stepHour(): number {\r\n return this._stepHour;\r\n }\r\n\r\n set stepHour(val: number) {\r\n this._stepHour = coerceNumberProperty(val, 1);\r\n }\r\n\r\n /**\r\n * Количество минут за один шаг\r\n */\r\n private _stepMinute = 1;\r\n @Input()\r\n get stepMinute(): number {\r\n return this._stepMinute;\r\n }\r\n\r\n set stepMinute(val: number) {\r\n this._stepMinute = coerceNumberProperty(val, 1);\r\n }\r\n\r\n /**\r\n * Количество секунд за один шаг\r\n */\r\n private _stepSecond = 1;\r\n @Input()\r\n get stepSecond(): number {\r\n return this._stepSecond;\r\n }\r\n\r\n set stepSecond(val: number) {\r\n this._stepSecond = coerceNumberProperty(val, 1);\r\n }\r\n\r\n /**\r\n * Задаёт первый день недели\r\n */\r\n private _firstDayOfWeek: number;\r\n @Input()\r\n get firstDayOfWeek() {\r\n return this._firstDayOfWeek;\r\n }\r\n\r\n set firstDayOfWeek(value: number) {\r\n value = coerceNumberProperty(value);\r\n if (value > 6 || value < 0) {\r\n this._firstDayOfWeek = undefined;\r\n } else {\r\n this._firstDayOfWeek = value;\r\n }\r\n }\r\n\r\n /**\r\n * Нужно ли скрывать даты соседних месяцев в начале или конце текущего месяца\r\n */\r\n private _hideOtherMonths = false;\r\n @Input()\r\n get hideOtherMonths(): boolean {\r\n return this._hideOtherMonths;\r\n }\r\n\r\n set hideOtherMonths(val: boolean) {\r\n this._hideOtherMonths = coerceBooleanProperty(val);\r\n }\r\n\r\n private readonly _id: string;\r\n get id(): string {\r\n return this._id;\r\n }\r\n\r\n abstract get selected(): T | null;\r\n\r\n abstract get selecteds(): T[] | null;\r\n\r\n abstract get dateTimeFilter(): (date: T | null) => boolean;\r\n\r\n abstract get maxDateTime(): T | null;\r\n\r\n abstract get minDateTime(): T | null;\r\n\r\n abstract get selectMode(): SelectMode;\r\n\r\n abstract get startAt(): T | null;\r\n\r\n abstract get endAt(): T | null;\r\n\r\n abstract get opened(): boolean;\r\n\r\n abstract get pickerMode(): PickerMode;\r\n\r\n abstract get pickerType(): PickerType;\r\n\r\n abstract get isInSingleMode(): boolean;\r\n\r\n abstract get isInRangeMode(): boolean;\r\n\r\n abstract select(date: T | T[]): void;\r\n\r\n abstract yearSelected: EventEmitter<T>;\r\n\r\n abstract monthSelected: EventEmitter<T>;\r\n\r\n abstract dateSelected: EventEmitter<T>;\r\n\r\n abstract selectYear(normalizedYear: T): void;\r\n\r\n abstract selectMonth(normalizedMonth: T): void;\r\n\r\n abstract selectDate(normalizedDate: T): void;\r\n\r\n get formatString(): string {\r\n return this.pickerType === 'both'\r\n ? this.dateTimeFormats.fullPickerInput\r\n : this.pickerType === 'calendar'\r\n ? this.dateTimeFormats.datePickerInput\r\n : this.dateTimeFormats.timePickerInput;\r\n }\r\n\r\n /**\r\n * Проверка доступности указанных даты и времени для выбора\r\n */\r\n public dateTimeChecker = (dateTime: T) => {\r\n return (\r\n dateTime != null &&\r\n this.dateTimeAdapter.isValid(dateTime) &&\r\n (!this.dateTimeFilter || this.dateTimeFilter(dateTime)) &&\r\n (this.minDateTime == null ||\r\n this.dateTimeAdapter.compare(dateTime, this.minDateTime) >=\r\n 0) &&\r\n (this.maxDateTime == null ||\r\n this.dateTimeAdapter.compare(dateTime, this.maxDateTime) <= 0)\r\n );\r\n };\r\n\r\n get disabled(): boolean {\r\n return false;\r\n }\r\n\r\n protected constructor(\r\n @Optional() protected dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n protected dateTimeFormats: OwlDateTimeFormats\r\n ) {\r\n if (!this.dateTimeAdapter) {\r\n throw Error(\r\n `OwlDateTimePicker: No provider found for DateTimeAdapter. You must import ` +\r\n `OwlLuxonDateTimeModule at your application root or provide a custom implementation.`\r\n );\r\n }\r\n\r\n if (!this.dateTimeFormats) {\r\n throw Error(\r\n `OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import ` +\r\n `OwlLuxonDateTimeModule at your application root or provide custom formats.`\r\n );\r\n }\r\n\r\n this._id = `owl-dt-picker-${nextUniqueId++}`;\r\n }\r\n\r\n protected getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n}\r\n","/**\r\n * date-time-picker-intl.service\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class OwlDateTimeIntl {\r\n\r\n /**\r\n * Поток событий изменения подписей для уведомления\r\n * компонентов об изменении подписей после инициализации\r\n */\r\n readonly changes: Subject<void> = new Subject<void>();\r\n\r\n /** Подпись кнопки увеличения секунд для программ чтения с экрана */\r\n upSecondLabel = 'Add a second';\r\n\r\n /** Подпись кнопки уменьшения секунд для программ чтения с экрана */\r\n downSecondLabel = 'Minus a second';\r\n\r\n /** Подпись кнопки увеличения минут для программ чтения с экрана */\r\n upMinuteLabel = 'Add a minute';\r\n\r\n /** Подпись кнопки уменьшения минут для программ чтения с экрана */\r\n downMinuteLabel = 'Minus a minute';\r\n\r\n /** Подпись кнопки увеличения часов для программ чтения с экрана */\r\n upHourLabel = 'Add a hour';\r\n\r\n /** Подпись кнопки уменьшения часов для программ чтения с экрана */\r\n downHourLabel = 'Minus a hour';\r\n\r\n /** Подпись кнопки предыдущего месяца для программ чтения с экрана */\r\n prevMonthLabel = 'Previous month';\r\n\r\n /** Подпись кнопки следующего месяца для программ чтения с экрана */\r\n nextMonthLabel = 'Next month';\r\n\r\n /** Подпись кнопки предыдущего года для программ чтения с экрана */\r\n prevYearLabel = 'Previous year';\r\n\r\n /** Подпись кнопки следующего года для программ чтения с экрана */\r\n nextYearLabel = 'Next year';\r\n\r\n /** Подпись кнопки предыдущей группы лет для программ чтения с экрана */\r\n prevMultiYearLabel = 'Previous 21 years';\r\n\r\n /** Подпись кнопки следующей группы лет для программ чтения с экрана */\r\n nextMultiYearLabel = 'Next 21 years';\r\n\r\n /** Подпись кнопки перехода к представлению месяца для программ чтения с экрана */\r\n switchToMonthViewLabel = 'Change to month view';\r\n\r\n /** Подпись кнопки перехода к представлению года для программ чтения с экрана */\r\n switchToMultiYearViewLabel = 'Choose month and year';\r\n\r\n /** Подпись кнопки отмены */\r\n cancelBtnLabel = 'Cancel';\r\n\r\n /** Подпись кнопки подтверждения */\r\n setBtnLabel = 'Set';\r\n\r\n /** Подпись начала диапазона ('from') в информации о выбранных датах */\r\n rangeFromLabel = 'From';\r\n\r\n /** Подпись конца диапазона ('to') в информации о выбранных датах */\r\n rangeToLabel = 'To';\r\n\r\n /** Подпись кнопки AM в 12-часовом формате */\r\n hour12AMLabel = 'AM';\r\n\r\n /** Подпись кнопки PM в 12-часовом формате */\r\n hour12PMLabel = 'PM';\r\n}\r\n","/**\r\n * calendar-body.component\r\n */\r\n\r\nimport {\r\n afterNextRender,\r\n AfterRenderRef,\r\n inject,\r\n Injector,\r\n DestroyRef,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n NgZone,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport { SelectMode } from './date-time.class';\r\n\r\nexport class CalendarCell {\r\n constructor(\r\n public value: number,\r\n public displayValue: string,\r\n public ariaLabel: string,\r\n public enabled: boolean,\r\n public out: boolean = false,\r\n public cellClass: string = ''\r\n ) {}\r\n}\r\n\r\n@Component({\r\n selector: '[owl-date-time-calendar-body]',\r\n exportAs: 'owlDateTimeCalendarBody',\r\n templateUrl: './calendar-body.component.html',\r\n styleUrls: ['./calendar-body.component.scss'],\r\n host: {\r\n '[class.owl-dt-calendar-body]': 'owlDTCalendarBodyClass'\r\n },\r\n preserveWhitespaces: false,\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OwlCalendarBodyComponent implements OnInit {\r\n private readonly injector = inject(Injector);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private focusRef: AfterRenderRef | undefined;\r\n\r\n /**\r\n * Номер активной ячейки в таблице\r\n */\r\n @Input()\r\n activeCell = 0;\r\n\r\n /**\r\n * Ячейки, отображаемые в таблице\r\n * */\r\n @Input()\r\n rows: CalendarCell[][];\r\n\r\n /**\r\n * Количество столбцов в таблице\r\n * */\r\n @Input()\r\n numCols = 7;\r\n\r\n /**\r\n * Соотношение ширины и высоты ячеек таблицы\r\n */\r\n @Input()\r\n cellRatio = 1;\r\n\r\n /**\r\n * Значение в таблице, соответствующее сегодняшней дате\r\n * */\r\n @Input()\r\n todayValue: number;\r\n\r\n /**\r\n * Выбранное значение в таблице\r\n * */\r\n @Input()\r\n selectedValues: number[] = [];\r\n\r\n /**\r\n * Текущий режим выбора даты\r\n */\r\n @Input()\r\n selectMode: SelectMode;\r\n\r\n /**\r\n * Событие выбора ячейки календаря\r\n * */\r\n @Output()\r\n public readonly select = new EventEmitter<CalendarCell>();\r\n\r\n get owlDTCalendarBodyClass(): boolean {\r\n return true;\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this.selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom' ||\r\n this.selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n constructor(private elmRef: ElementRef<HTMLElement>, private ngZone: NgZone) {}\r\n\r\n public ngOnInit() {}\r\n\r\n public selectCell(cell: CalendarCell): void {\r\n if (cell.enabled) {\r\n this.select.emit(cell);\r\n }\r\n }\r\n\r\n public isActiveCell(rowIndex: number, colIndex: number): boolean {\r\n const cellNumber = rowIndex * this.numCols + colIndex;\r\n return cellNumber === this.activeCell;\r\n }\r\n\r\n /**\r\n * Проверяет, выбрана ли ячейка\r\n */\r\n public isSelected(value: number): boolean {\r\n if (!this.selectedValues || this.selectedValues.length === 0) {\r\n return false;\r\n }\r\n\r\n if (this.isInSingleMode) {\r\n return value === this.selectedValues[0];\r\n }\r\n\r\n if (this.isInRangeMode) {\r\n const fromValue = this.selectedValues?.[0];\r\n const toValue = this.selectedValues?.[1];\r\n\r\n return value === fromValue || value === toValue;\r\n }\r\n }\r\n\r\n /**\r\n * Проверяет, входит ли ячейка в диапазон\r\n * */\r\n public isInRange(value: number): boolean {\r\n if (this.isInRangeMode) {\r\n const fromValue = this.selectedValues?.[0];\r\n const toValue = this.selectedValues?.[1];\r\n\r\n if (fromValue != null && toValue != null) {\r\n return value >= fromValue && value <= toValue;\r\n } else {\r\n return value === fromValue || value === toValue;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Проверяет, соответствует ли ячейка началу диапазона\r\n * */\r\n public isRangeFrom(value: number): boolean {\r\n if (this.isInRangeMode) {\r\n const fromValue = this.selectedValues?.[0];\r\n return fromValue != null && value === fromValue;\r\n }\r\n }\r\n\r\n /**\r\n * Проверяет, соответствует ли ячейка концу диапазона\r\n * */\r\n public isRangeTo(value: number): boolean {\r\n if (this.isInRangeMode) {\r\n const toValue = this.selectedValues?.[1];\r\n return toValue != null && value === toValue;\r\n }\r\n }\r\n\r\n /**\r\n * Переводит фокус на активную ячейку\r\n * */\r\n public focusActiveCell(): void {\r\n if (this.destroyRef.destroyed) {\r\n return;\r\n }\r\n\r\n this.focusRef?.destroy();\r\n this.focusRef = afterNextRender({\r\n write: () => {\r\n this.focusRef = undefined;\r\n this.elmRef.nativeElement.querySelector<HTMLElement>('.owl-dt-calendar-cell-active')?.focus();\r\n }\r\n }, { injector: this.injector });\r\n }\r\n}\r\n","@for (row of rows; track $index; let rowIndex = $index) {\r\n <tr role=\"row\">\r\n @for (item of row; track $index; let colIndex = $index) {\r\n <td\r\n class=\"owl-dt-calendar-cell {{ item.cellClass }}\"\r\n [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\r\n [class.owl-dt-calendar-cell-active]=\"\r\n isActiveCell(rowIndex, colIndex)\r\n \"\r\n [class.owl-dt-calendar-cell-disabled]=\"!item.enabled\"\r\n [class.owl-dt-calendar-cell-in-range]=\"isInRange(item.value)\"\r\n [class.owl-dt-calendar-cell-range-from]=\"\r\n isRangeFrom(item.value)\r\n \"\r\n [class.owl-dt-calendar-cell-range-to]=\"isRangeTo(item.value)\"\r\n [attr.aria-label]=\"item.ariaLabel\"\r\n [attr.aria-disabled]=\"!item.enabled || null\"\r\n [attr.aria-current]=\"item.value === todayValue ? 'date' : null\"\r\n [attr.aria-selected]=\"isSelected(item.value)\"\r\n [style.width.%]=\"100 / numCols\"\r\n [style.paddingTop.%]=\"(50 * cellRatio) / numCols\"\r\n [style.paddingBottom.%]=\"(50 * cellRatio) / numCols\"\r\n (click)=\"selectCell(item)\"\r\n >\r\n <span\r\n class=\"owl-dt-calendar-cell-content\"\r\n [ngClass]=\"{\r\n 'owl-dt-calendar-cell-out': item.out,\r\n 'owl-dt-calendar-cell-today': item.value === todayValue,\r\n 'owl-dt-calendar-cell-selected': isSelected(item.value),\r\n }\"\r\n >\r\n {{ item.displayValue }}\r\n </span>\r\n </td>\r\n }\r\n </tr>\r\n}\r\n","import { InjectionToken, Provider } from '@angular/core';\r\n\r\nexport function defaultOptionsFactory() {\r\n return DefaultOptions.create();\r\n\r\n}\r\nexport function multiYearOptionsFactory(options: Options) {\r\n return options.multiYear;\r\n }\r\n\r\nexport interface Options {\r\n multiYear: {\r\n yearsPerRow: number,\r\n yearRows: number\r\n };\r\n}\r\nexport class DefaultOptions {\r\n public static create(): Options {\r\n // Всегда возвращаем новый экземпляр\r\n return {\r\n multiYear: {\r\n yearRows: 7,\r\n yearsPerRow: 3\r\n }\r\n };\r\n }\r\n}\r\n\r\nexport abstract class OptionsTokens {\r\n public static all = new InjectionToken<Options>('All options token');\r\n public static multiYear = new InjectionToken<Options['multiYear']>('Grid view options token');\r\n}\r\n\r\nexport const optionsProviders: Provider[] = [\r\n {\r\n provide: OptionsTokens.all,\r\n useFactory: defaultOptionsFactory,\r\n },\r\n {\r\n provide: OptionsTokens.multiYear,\r\n useFactory: multiYearOptionsFactory,\r\n deps: [OptionsTokens.all],\r\n },\r\n];\r\n","/**\r\n * calendar-multi-year-view.component\r\n */\r\n\r\nimport {\r\n AfterContentInit,\r\n ChangeDetectionStrategy, ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';\r\nimport { SelectMode } from './date-time.class';\r\nimport {\r\n DOWN_ARROW,\r\n END,\r\n ENTER,\r\n HOME,\r\n LEFT_ARROW,\r\n PAGE_DOWN,\r\n PAGE_UP,\r\n RIGHT_ARROW,\r\n UP_ARROW\r\n} from '@angular/cdk/keycodes';\r\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\r\nimport { OptionsTokens, Options } from './options-provider';\r\n\r\n@Component({\r\n selector: 'owl-date-time-multi-year-view',\r\n templateUrl: './calendar-multi-year-view.component.html',\r\n styleUrls: ['./calendar-multi-year-view.component.scss'],\r\n host: {\r\n '[class.owl-dt-calendar-view]': 'owlDTCalendarView',\r\n '[class.owl-dt-calendar-multi-year-view]': 'owlDTCalendarMultiYearView'\r\n },\r\n standalone: false,\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\n\r\nexport class OwlMultiYearViewComponent<T> implements OnInit, AfterContentInit {\r\n\r\n /**\r\n * Режим выбора даты\r\n * */\r\n private _selectMode: SelectMode = 'single';\r\n @Input()\r\n get selectMode(): SelectMode {\r\n return this._selectMode;\r\n }\r\n\r\n set selectMode( val: SelectMode ) {\r\n this._selectMode = val;\r\n if (this.initiated) {\r\n this.setSelectedYears();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n /** Текущая выбранная дата */\r\n private _selected: T | null;\r\n @Input()\r\n get selected(): T | null {\r\n return this._selected;\r\n }\r\n\r\n set selected( value: T | null ) {\r\n const oldSelected = this._selected;\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._selected = this.getValidDate(value);\r\n\r\n if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {\r\n this.setSelectedYears();\r\n }\r\n }\r\n\r\n private _selecteds: T[] = [];\r\n @Input()\r\n get selecteds(): T[] {\r\n return this._selecteds;\r\n }\r\n\r\n set selecteds( values: T[] ) {\r\n this._selecteds = (values ?? []).map(( v ) => {\r\n v = this.dateTimeAdapter.deserialize(v);\r\n return this.getValidDate(v);\r\n });\r\n this.setSelectedYears();\r\n }\r\n\r\n private _pickerDateTime: T | null;\r\n @Input()\r\n get pickerDateTime() {\r\n return this._pickerDateTime;\r\n }\r\n\r\n set pickerDateTime( value: T ) {\r\n const oldDateTime = this._pickerDateTime;\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._pickerDateTime = this.getValidDate(value) ?? this.dateTimeAdapter.now();\r\n\r\n if (oldDateTime != null && this._pickerDateTime != null &&\r\n !this.isSameYearList(oldDateTime, this._pickerDateTime)) {\r\n this.generateYearList();\r\n }\r\n }\r\n\r\n /**\r\n * Функция, определяющая доступные для выбора даты\r\n * */\r\n private _dateFilter: ( date: T ) => boolean;\r\n @Input()\r\n get dateFilter() {\r\n return this._dateFilter;\r\n }\r\n\r\n set dateFilter( filter: ( date: T ) => boolean ) {\r\n this._dateFilter = filter;\r\n if (this.initiated) {\r\n this.generateYearList();\r\n }\r\n }\r\n\r\n /** Минимальная доступная для выбора дата */\r\n private _minDate: T | null;\r\n @Input()\r\n get minDate(): T | null {\r\n return this._minDate;\r\n }\r\n\r\n set minDate( value: T | null ) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._minDate = this.getValidDate(value);\r\n if (this.initiated) {\r\n this.generateYearList();\r\n }\r\n }\r\n\r\n /** Максимальная доступная для выбора дата */\r\n private _maxDate: T | null;\r\n @Input()\r\n get maxDate(): T | null {\r\n return this._maxDate;\r\n }\r\n\r\n set maxDate( value: T | null ) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._maxDate = this.getValidDate(value);\r\n if (this.initiated) {\r\n this.generateYearList();\r\n }\r\n }\r\n\r\n private _todayYear: number;\r\n get todayYear(): number {\r\n return this._todayYear;\r\n }\r\n\r\n private _years: CalendarCell[][];\r\n get years() {\r\n return this._years;\r\n }\r\n\r\n private _selectedYears: number[];\r\n get selectedYears(): number[] {\r\n return this._selectedYears;\r\n }\r\n\r\n private initiated = false;\r\n\r\n get isInSingleMode(): boolean {\r\n return this.selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return this.selectMode === 'range' || this.selectMode === 'rangeFrom'\r\n || this.selectMode === 'rangeTo';\r\n }\r\n\r\n get activeCell(): number {\r\n if (this._pickerDateTime != null) {\r\n return this.dateTimeAdapter.getYear(this._pickerDateTime) - this.getYearListStart(this._pickerDateTime);\r\n }\r\n }\r\n\r\n get tableHeader(): string {\r\n if (this._years && this._years.length > 0) {\r\n return `${this._years[0][0].displayValue} - ${this._years[this.options.yearRows - 1][this.options.yearsPerRow - 1].displayValue}`;\r\n }\r\n }\r\n\r\n get prevButtonLabel(): string {\r\n return this.pickerIntl.prevMultiYearLabel;\r\n }\r\n\r\n get nextButtonLabel(): string {\r\n return this.pickerIntl.nextMultiYearLabel;\r\n }\r\n\r\n /**\r\n * Обработчик выбора нового месяца\r\n * */\r\n @Output() readonly change = new EventEmitter<T>();\r\n\r\n /**\r\n * Передаёт выбранный год, не изменяя выбранную дату\r\n * */\r\n @Output() readonly yearSelected = new EventEmitter<T>();\r\n\r\n /** Событие активации любой даты */\r\n @Output() readonly pickerDateTimeChange: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n /** Событие выбора ячейки календаря клавишей Enter */\r\n @Output() readonly keyboardEnter: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /** Тело таблицы календаря */\r\n @ViewChild(OwlCalendarBodyComponent, { static: true }) calendarBodyElm: OwlCalendarBodyComponent;\r\n\r\n get owlDTCalendarView(): boolean {\r\n return true;\r\n }\r\n\r\n get owlDTCalendarMultiYearView(): boolean {\r\n return true;\r\n }\r\n\r\n constructor( private cdRef: ChangeDetectorRef,\r\n private pickerIntl: OwlDateTimeIntl,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\r\n @Inject(OptionsTokens.multiYear) public readonly options: Options['multiYear']) {\r\n this.pickerIntl.changes.pipe(takeUntilDestroyed()).subscribe(() => this.cdRef.markForCheck());\r\n this.dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this.generateYearList();\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n public ngOnInit() {\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this._todayYear = this.dateTimeAdapter.getYear(this.dateTimeAdapter.now());\r\n this.generateYearList();\r\n this.initiated = true;\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор ячейки календаря\r\n */\r\n public selectCalendarCell( cell: CalendarCell ): void {\r\n if (cell.enabled) {\r\n this.selectYear(cell.value);\r\n }\r\n }\r\n\r\n private selectYear( year: number ): void {\r\n this.yearSelected.emit(this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.firstMonthOfTheYear, 1));\r\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n year,\r\n this.dateTimeAdapter.getMonth(this.pickerDateTime),\r\n 1\r\n );\r\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth);\r\n const selected = this.dateTimeAdapter.createDate(\r\n year,\r\n this.dateTimeAdapter.getMonth(this.pickerDateTime),\r\n Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerDateTime)),\r\n this.dateTimeAdapter.getHours(this.pickerDateTime),\r\n this.dateTimeAdapter.getMinutes(this.pickerDateTime),\r\n this.dateTimeAdapter.getSeconds(this.pickerDateTime),\r\n );\r\n\r\n this.change.emit(selected);\r\n }\r\n\r\n /**\r\n * Создаёт список предыдущих лет\r\n * */\r\n public prevYearList( event: any ): void {\r\n this._pickerDateTime = this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, -1 * this.options.yearsPerRow * this.options.yearRows);\r\n this.generateYearList();\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Создаёт список следующих лет\r\n * */\r\n public nextYearList( event: any ): void {\r\n this._pickerDateTime = this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, this.options.yearsPerRow * this.options.yearRows);\r\n this.generateYearList();\r\n event.preventDefault();\r\n }\r\n\r\n public generateYearList(): void {\r\n if (this._pickerDateTime == null) {\r\n return;\r\n }\r\n\r\n this._years = [];\r\n\r\n const pickerDateTimeYear = this.dateTimeAdapter.getYear(this._pickerDateTime);\r\n const offset = pickerDateTimeYear - this.getYearListStart(this._pickerDateTime);\r\n\r\n for (let i = 0; i < this.options.yearRows; i++) {\r\n const row = [];\r\n\r\n for (let j = 0; j < this.options.yearsPerRow; j++) {\r\n const year = pickerDateTimeYear - offset + (j + i * this.options.yearsPerRow);\r\n const yearCell = this.createYearCell(year);\r\n row.push(yearCell);\r\n }\r\n\r\n this._years.push(row);\r\n }\r\n\r\n return;\r\n\r\n }\r\n\r\n /** Доступна ли кнопка перехода к предыдущему периоду */\r\n public previousEnabled(): boolean {\r\n return this.minDate == null || this.getYearListStart(this._pickerDateTime) > this.getYearListStart(this.minDate);\r\n }\r\n\r\n /** Доступна ли кнопка перехода к следующему периоду */\r\n public nextEnabled(): boolean {\r\n return this.maxDate == null || this.getYearListStart(this._pickerDateTime) < this.getYearListStart(this.maxDate);\r\n }\r\n\r\n public handleCalendarKeydown( event: KeyboardEvent ): void {\r\n let dateTime;\r\n switch (event.keyCode) {\r\n // На один год назад\r\n case LEFT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime, -1);\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один год вперёд\r\n case RIGHT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime, 1);\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На три года назад\r\n case UP_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime, -1 * this.options.yearsPerRow);\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На три года вперёд\r\n case DOWN_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime, this.options.yearsPerRow);\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К первому году на текущей странице\r\n case HOME:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime,\r\n -this.activeCell);\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К последнему году на текущей странице\r\n case END:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime,\r\n (this.options.yearsPerRow * this.options.yearRows) - this.activeCell - 1);\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На одну страницу лет (или десять страниц) назад\r\n case PAGE_UP:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, event.altKey ? -10 * (this.options.yearsPerRow * this.options.yearRows) : -1 * (this.options.yearsPerRow * this.options.yearRows));\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На одну страницу лет (или десять страниц) вперёд\r\n case PAGE_DOWN:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, event.altKey ? 10 * (this.options.yearsPerRow * this.options.yearRows) : (this.options.yearsPerRow * this.options.yearRows));\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n case ENTER:\r\n if (this.isYearEnabled(this.dateTimeAdapter.getYear(this._pickerDateTime))) {\r\n this.selectYear(this.dateTimeAdapter.getYear(this._pickerDateTime));\r\n this.keyboardEnter.emit();\r\n }\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n this.focusActiveCell();\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Создаёт CalendarCell для указанного года\r\n */\r\n private createYearCell( year: number ): CalendarCell {\r\n const startDateOfYear = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.firstMonthOfTheYear, 1);\r\n const ariaLabel = this.dateTimeAdapter.getYearName(startDateOfYear);\r\n const cellClass = 'owl-dt-year-' + year;\r\n return new CalendarCell(year, year.toString(), ariaLabel, this.isYearEnabled(year), false, cellClass);\r\n }\r\n\r\n private setSelectedYears(): void {\r\n\r\n this._selectedYears = [];\r\n\r\n if (this.isInSingleMode && this.selected != null) {\r\n this._selectedYears[0] = this.dateTimeAdapter.getYear(this.selected);\r\n }\r\n\r\n if (this.isInRangeMode && this.selecteds) {\r\n this._selectedYears = this.selecteds.map(( selected ) => {\r\n if (this.dateTimeAdapter.isValid(selected)) {\r\n return this.dateTimeAdapter.getYear(selected);\r\n } else {\r\n return null;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** Доступен ли указанный год для выбора */\r\n private isYearEnabled( year: number ) {\r\n // Отключаем выбор года, если он позже maxDate или раньше minDate\r\n if (year === undefined || year === null ||\r\n (this.maxDate != null && year > this.dateTimeAdapter.getYear(this.maxDate)) ||\r\n (this.minDate != null && year < this.dateTimeAdapter.getYear(this.minDate))) {\r\n return false;\r\n }\r\n\r\n // Разрешаем выбор, если проверки пройдены и фильтр не задан\r\n if (!this.dateFilter) {\r\n return true;\r\n }\r\n\r\n const firstOfYear = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.firstMonthOfTheYear, 1);\r\n\r\n // Считаем год доступным для выбора, если доступна хотя бы одна дата в нём\r\n for (let date = firstOfYear; this.dateTimeAdapter.getYear(date) === year;\r\n date = this.dateTimeAdapter.addCalendarDays(date, 1)) {\r\n if (this.dateFilter(date) &&\r\n (this.minDate == null || this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\r\n (this.maxDate == null || this.dateTimeAdapter.compare(date, this.maxDate) <= 0)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isSameYearList( date1: T, date2: T ): boolean {\r\n return this.getYearListStart(date1) === this.getYearListStart(date2);\r\n }\r\n\r\n private getYearListStart(date: T): number {\r\n const yearsPerPage = this.options.yearsPerRow * this.options.yearRows;\r\n return Math.floor(this.dateTimeAdapter.getYear(date) / yearsPerPage) * yearsPerPage;\r\n }\r\n\r\n /**\r\n * Возвращает корректный объект даты\r\n */\r\n private getValidDate( obj: any ): T | null {\r\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj)) ? obj : null;\r\n }\r\n\r\n private focusActiveCell() {\r\n this.calendarBodyElm.focusActiveCell();\r\n }\r\n}\r\n","<button class=\"owl-dt-control-button owl-dt-control-arrow-button\"\r\n [disabled]=\"!previousEnabled()\" [attr.aria-label]=\"prevButtonLabel\"\r\n type=\"button\" tabindex=\"0\" (click)=\"prevYearList($event)\">\r\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG-стрелка влево\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\" xml:space=\"preserve\"\r\n width=\"100%\" height=\"100%\">\r\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\" d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\"/>\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n<table class=\"owl-dt-calendar-table owl-dt-calendar-multi-year-table\">\r\n <thead class=\"owl-dt-calendar-header\">\r\n <tr>\r\n <th [attr.colspan]=\"options.yearsPerRow\">{{tableHeader}}</th>\r\n </tr>\r\n </thead>\r\n <tbody owl-date-time-calendar-body role=\"grid\"\r\n [rows]=\"years\" [numCols]=\"options.yearsPerRow\" [cellRatio]=\"3 / 7\"\r\n [activeCell]=\"activeCell\"\r\n [todayValue]=\"todayYear\"\r\n [selectedValues]=\"selectedYears\"\r\n [selectMode]=\"selectMode\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\"></tbody>\r\n</table>\r\n<button class=\"owl-dt-control-button owl-dt-control-arrow-button\"\r\n [disabled]=\"!nextEnabled()\" [attr.aria-label]=\"nextButtonLabel\"\r\n type=\"button\" tabindex=\"0\" (click)=\"nextYearList($event)\">\r\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG-стрелка вправо\"> -->\r\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\" style=\"enable-background:new 0 0 250.738 250.738;\" xml:space=\"preserve\">\r\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\" d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\r\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\r\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\r\n C197.237,120.447,195.534,115.448,191.75,111.689z\"/>\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n","/**\r\n * calendar-year-view.component\r\n */\r\n\r\nimport {\r\n AfterContentInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {\r\n CalendarCell,\r\n OwlCalendarBodyComponent\r\n} from './calendar-body.component';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport {\r\n OWL_DATE_TIME_FORMATS,\r\n OwlDateTimeFormats\r\n} from './adapter/date-time-format.class';\r\nimport { Subscription } from 'rxjs';\r\nimport { SelectMode } from './date-time.class';\r\nimport {\r\n DOWN_ARROW,\r\n END,\r\n ENTER,\r\n HOME,\r\n LEFT_ARROW,\r\n PAGE_DOWN,\r\n PAGE_UP,\r\n RIGHT_ARROW,\r\n UP_ARROW\r\n} from '@angular/cdk/keycodes';\r\n\r\nconst MONTHS_PER_YEAR = 12;\r\nconst MONTHS_PER_ROW = 3;\r\n\r\n@Component({\r\n selector: 'owl-date-time-year-view',\r\n exportAs: 'owlMonthView',\r\n templateUrl: './calendar-year-view.component.html',\r\n styleUrls: ['./calendar-year-view.component.scss'],\r\n host: {\r\n '[class.owl-dt-calendar-view]': 'owlDTCalendarView'\r\n },\r\n standalone: false,\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OwlYearViewComponent<T>\r\n implements OnInit, AfterContentInit, OnDestroy {\r\n /**\r\n * Режим выбора даты\r\n * */\r\n private _selectMode: SelectMode = 'single';\r\n @Input()\r\n get selectMode(): SelectMode {\r\n return this._selectMode;\r\n }\r\n\r\n set selectMode(val: SelectMode) {\r\n this._selectMode = val;\r\n if (this.initiated) {\r\n this.generateMonthList();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n /** Текущая выбранная дата */\r\n private _selected: T | null;\r\n @Input()\r\n get selected(): T | null {\r\n return this._selected;\r\n }\r\n\r\n set selected(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._selected = this.getValidDate(value);\r\n this.setSelectedMonths();\r\n }\r\n\r\n private _selecteds: T[] = [];\r\n @Input()\r\n get selecteds(): T[] {\r\n return this._selecteds;\r\n }\r\n\r\n set selecteds(values: T[]) {\r\n this._selecteds = [];\r\n for (let i = 0; i < (values?.length ?? 0); i++) {\r\n const value = this.dateTimeAdapter.deserialize(values[i]);\r\n this._selecteds.push(this.getValidDate(value));\r\n }\r\n\r\n this.setSelectedMonths();\r\n }\r\n\r\n private _pickerDateTime: T | null;\r\n @Input()\r\n get pickerDateTime() {\r\n return this._pickerDateTime;\r\n }\r\n\r\n set pickerDateTime(value: T) {\r\n const oldDateTime = this._pickerDateTime;\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._pickerDateTime =\r\n this.getValidDate(value) ?? this.dateTimeAdapter.now();\r\n\r\n if (\r\n !this.hasSameYear(oldDateTime, this._pickerDateTime) &&\r\n this.initiated\r\n ) {\r\n this.generateMonthList();\r\n }\r\n }\r\n\r\n /**\r\n * Функция, определяющая доступные для выбора даты\r\n * */\r\n private _dateFilter: (date: T) => boolean;\r\n @Input()\r\n get dateFilter() {\r\n return this._dateFilter;\r\n }\r\n\r\n set dateFilter(filter: (date: T) => boolean) {\r\n this._dateFilter = filter;\r\n if (this.initiated) {\r\n this.generateMonthList();\r\n }\r\n }\r\n\r\n /** Минимальная доступная для выбора дата */\r\n private _minDate: T | null;\r\n @Input()\r\n get minDate(): T | null {\r\n return this._minDate;\r\n }\r\n\r\n set minDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._minDate = this.getValidDate(value);\r\n if (this.initiated) {\r\n this.generateMonthList();\r\n }\r\n }\r\n\r\n /** Максимальная доступная для выбора дата */\r\n private _maxDate: T | null;\r\n @Input()\r\n get maxDate(): T | null {\r\n return this._maxDate;\r\n }\r\n\r\n set maxDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._maxDate = this.getValidDate(value);\r\n if (this.initiated) {\r\n this.generateMonthList();\r\n }\r\n }\r\n\r\n private monthNames: string[];\r\n\r\n private _months: CalendarCell[][];\r\n get months() {\r\n return this._months;\r\n }\r\n\r\n get activeCell(): number {\r\n if (this._pickerDateTime != null) {\r\n return this.dateTimeAdapter.getMonth(this._pickerDateTime);\r\n }\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this.selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom' ||\r\n this.selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n private localeSub: Subscription = Subscription.EMPTY;\r\n\r\n private initiated = false;\r\n\r\n public todayMonth: number | null;\r\n\r\n /**\r\n * Массив номеров месяцев из selectedDates\r\n * Значение — номер месяца в текущем году\r\n * */\r\n public selectedMonths: number[] = [];\r\n\r\n /**\r\n * Обработчик выбора нового месяца\r\n * */\r\n @Output()\r\n readonly change = new EventEmitter<T>();\r\n\r\n /**\r\n * Передаёт выбранный год, не изменяя выбранную дату\r\n * */\r\n @Output()\r\n readonly monthSelected = new EventEmitter<T>();\r\n\r\n /** Событие активации любой даты */\r\n @Output()\r\n readonly pickerDateTimeChange: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n /** Событие выбора ячейки календаря клавишей Enter */\r\n @Output()\r\n readonly keyboardEnter: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /** Тело таблицы календаря */\r\n @ViewChild(OwlCalendarBodyComponent, { static: true })\r\n calendarBodyElm: OwlCalendarBodyComponent;\r\n\r\n get owlDTCalendarView(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n private dateTimeFormats: OwlDateTimeFormats\r\n ) {\r\n this.monthNames = this.dateTimeAdapter.getMonthNames('short');\r\n }\r\n\r\n public ngOnInit() {\r\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(() => {\r\n this.monthNames = this.dateTimeAdapter.getMonthNames('short');\r\n this.generateMonthList();\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.generateMonthList();\r\n this.initiated = true;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.localeSub.unsubscribe();\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор ячейки календаря\r\n */\r\n public selectCalendarCell(cell: CalendarCell): void {\r\n if (cell.enabled) {\r\n this.selectMonth(cell.value);\r\n }\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор нового месяца\r\n */\r\n private selectMonth(month: number): void {\r\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerDateTime),\r\n month,\r\n 1\r\n );\r\n\r\n this.monthSelected.emit(firstDateOfMonth);\r\n\r\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(\r\n firstDateOfMonth\r\n );\r\n const result = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerDateTime),\r\n month,\r\n Math.min(\r\n daysInMonth,\r\n this.dateTimeAdapter.getDate(this.pickerDateTime)\r\n ),\r\n this.dateTimeAdapter.getHours(this.pickerDateTime),\r\n this.dateTimeAdapter.getMinutes(this.pickerDateTime),\r\n this.dateTimeAdapter.getSeconds(this.pickerDateTime)\r\n );\r\n\r\n this.change.emit(result);\r\n }\r\n\r\n /**\r\n * Обрабатывает keydown в таблице календаря\r\n */\r\n public handleCalendarKeydown(event: KeyboardEvent): void {\r\n let dateTime;\r\n switch (event.keyCode) {\r\n // На один месяц назад\r\n case LEFT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n -1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один месяц вперёд\r\n case RIGHT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n 1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На три месяца назад\r\n case UP_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n -3\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На три месяца вперёд\r\n case DOWN_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n 3\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К первому месяцу текущего года\r\n case HOME:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n -this.dateTimeAdapter.getMonth(this.pickerDateTime)\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К последнему месяцу текущего года\r\n case END:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n 11 - this.dateTimeAdapter.getMonth(this.pickerDateTime)\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один год (или десять лет) назад\r\n case PAGE_UP:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(\r\n this.pickerDateTime,\r\n event.altKey ? -10 : -1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один год (или десять лет) вперёд\r\n case PAGE_DOWN:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(\r\n this.pickerDateTime,\r\n event.altKey ? 10 : 1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // Выбирает текущий месяц\r\n case ENTER:\r\n if (this.isMonthEnabled(this.dateTimeAdapter.getMonth(this.pickerDateTime))) {\r\n this.selectMonth(this.dateTimeAdapter.getMonth(this.pickerDateTime));\r\n this.keyboardEnter.emit();\r\n }\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this.focusActiveCell();\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Создаёт список месяцев календаря\r\n * */\r\n private generateMonthList(): void {\r\n if (this.pickerDateTime == null) {\r\n return;\r\n }\r\n\r\n this.setSelectedMonths();\r\n this.todayMonth = this.getMonthInCurrentYear(\r\n this.dateTimeAdapter.now()\r\n );\r\n\r\n this._months = [];\r\n for (let i = 0; i < MONTHS_PER_YEAR / MONTHS_PER_ROW; i++) {\r\n const row = [];\r\n\r\n for (let j = 0; j < MONTHS_PER_ROW; j++) {\r\n const month = j + i * MONTHS_PER_ROW + this.dateTimeAdapter.firstMonthOfTheYear;\r\n const monthCell = this.createMonthCell(month);\r\n row.push(monthCell);\r\n }\r\n\r\n this._months.push(row);\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Создаёт CalendarCell для указанного месяца\r\n */\r\n private createMonthCell(month: number): CalendarCell {\r\n const startDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerDateTime),\r\n month,\r\n 1\r\n );\r\n const ariaLabel = this.dateTimeAdapter.format(\r\n startDateOfMonth,\r\n this.dateTimeFormats.monthYearA11yLabel\r\n );\r\n const cellClass = 'owl-dt-month-' + month;\r\n return new CalendarCell(\r\n month,\r\n this.monthNames[month-this.dateTimeAdapter.firstMonthOfTheYear],\r\n ariaLabel,\r\n this.isMonthEnabled(month),\r\n false,\r\n cellClass\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность указанного месяца для выбора\r\n */\r\n private isMonthEnabled(month: number): boolean {\r\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerDateTime),\r\n month,\r\n 1\r\n );\r\n\r\n // Если в месяце доступна для выбора хотя бы одна дата,\r\n // считаем месяц доступным для выбора\r\n for (\r\n let date = firstDateOfMonth;\r\n this.dateTimeAdapter.getMonth(date) === month;\r\n date = this.dateTimeAdapter.addCalendarDays(date, 1)\r\n ) {\r\n if (\r\n date != null &&\r\n (!this.dateFilter || this.dateFilter(date)) &&\r\n (this.minDate == null ||\r\n this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\r\n (this.maxDate == null ||\r\n this.dateTimeAdapter.compare(date, this.maxDate) <= 0)\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Возвращает месяц указанной даты в текущем году\r\n * Возвращает null, если указанная дата находится в другом году\r\n */\r\n private getMonthInCurrentYear(date: T | null): number {\r\n if (this.getValidDate(date) != null && this.getValidDate(this._pickerDateTime) != null) {\r\n const result = this.dateTimeAdapter.compareYear(\r\n date,\r\n this._pickerDateTime\r\n );\r\n\r\n // < 0: выбранная дата находится в предыдущем году, поэтому возвращаем -1\r\n // > 0: выбранная дата находится в следующем году, поэтому возвращаем 12\r\n // 0: оба значения находятся в одном году, поэтому возвращаем номер месяца\r\n if (result < 0) {\r\n return -1;\r\n } else if (result > 0) {\r\n return 12;\r\n } else {\r\n return this.dateTimeAdapter.getMonth(date);\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Задаёт значение selectedMonths\r\n * В режиме single содержит одно значение — месяц выбранной даты\r\n * В режиме range содержит два значения: месяц fromValue и месяц toValue\r\n * */\r\n private setSelectedMonths(): void {\r\n this.selectedMonths = [];\r\n if (this.isInSingleMode && this.selected != null) {\r\n this.selectedMonths[0] = this.getMonthInCurrentYear(this.selected);\r\n }\r\n\r\n if (this.isInRangeMode && this.selecteds) {\r\n this.selectedMonths[0] = this.getMonthInCurrentYear(\r\n this.selecteds[0]\r\n );\r\n this.selectedMonths[1] = this.getMonthInCurrentYear(\r\n this.selecteds[1]\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Проверяет, находятся ли указанные даты в одном году\r\n */\r\n private hasSameYear(dateLeft: T, dateRight: T) {\r\n return !!(\r\n dateLeft != null &&\r\n dateRight != null &&\r\n this.dateTimeAdapter.getYear(dateLeft) ===\r\n this.dateTimeAdapter.getYear(dateRight)\r\n );\r\n }\r\n\r\n /**\r\n * Возвращает корректный объект даты\r\n */\r\n private getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n\r\n private focusActiveCell() {\r\n this.calendarBodyElm.focusActiveCell();\r\n }\r\n}\r\n","<table class=\"owl-dt-calendar-table owl-dt-calendar-year-table\">\r\n <thead class=\"owl-dt-calendar-header\">\r\n <tr>\r\n <th class=\"owl-dt-calendar-table-divider\" aria-hidden=\"true\" colspan=\"3\"></th>\r\n </tr>\r\n </thead>\r\n <tbody owl-date-time-calendar-body role=\"grid\"\r\n [rows]=\"months\" [numCols]=\"3\" [cellRatio]=\"3 / 7\"\r\n [activeCell]=\"activeCell\"\r\n [todayValue]=\"todayMonth\"\r\n [selectedValues]=\"selectedMonths\"\r\n [selectMode]=\"selectMode\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\">\r\n </tbody>\r\n</table>\r\n","/**\r\n * calendar-month-view.component\r\n */\r\n\r\nimport {\r\n AfterContentInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {\r\n CalendarCell,\r\n OwlCalendarBodyComponent\r\n} from './calendar-body.component';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport {\r\n OWL_DATE_TIME_FORMATS,\r\n OwlDateTimeFormats\r\n} from './adapter/date-time-format.class';\r\nimport { Subscription } from 'rxjs';\r\nimport { SelectMode } from './date-time.class';\r\nimport {\r\n DOWN_ARROW,\r\n END,\r\n ENTER,\r\n HOME,\r\n LEFT_ARROW,\r\n PAGE_DOWN,\r\n PAGE_UP,\r\n RIGHT_ARROW,\r\n UP_ARROW\r\n} from '@angular/cdk/keycodes';\r\nimport { getLocaleFirstDayOfWeek } from '@angular/common';\r\n\r\nconst DAYS_PER_WEEK = 7;\r\nconst WEEKS_PER_VIEW = 6;\r\n\r\n@Component({\r\n selector: 'owl-date-time-month-view',\r\n exportAs: 'owlYearView',\r\n templateUrl: './calendar-month-view.component.html',\r\n styleUrls: ['./calendar-month-view.component.scss'],\r\n standalone: false,\r\n host: {\r\n '[class.owl-dt-calendar-view]': 'owlDTCalendarView'\r\n },\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OwlMonthViewComponent<T>\r\n implements OnInit, AfterContentInit, OnDestroy {\r\n /**\r\n * Нужно ли скрывать даты соседних месяцев в начале или конце текущего месяца\r\n * */\r\n @Input()\r\n hideOtherMonths = false;\r\n\r\n /**\r\n * Нужно ли показывать номера недель в календаре\r\n * */\r\n @Input()\r\n showCalendarWeeks = false;\r\n\r\n private isDefaultFirstDayOfWeek = true;\r\n\r\n /**\r\n * Задаёт первый день недели\r\n * Воскресенье: 0 — суббота: 6\r\n * */\r\n private _firstDayOfWeek: number;\r\n\r\n @Input()\r\n get firstDayOfWeek(): number {\r\n return this._firstDayOfWeek;\r\n }\r\n\r\n set firstDayOfWeek(val: number) {\r\n if (val >= 0 && val <= 6 && val !== this._firstDayOfWeek) {\r\n this._firstDayOfWeek = val;\r\n this.isDefaultFirstDayOfWeek = false;\r\n\r\n if (this.initiated) {\r\n this.generateWeekDays();\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Режим выбора даты\r\n * */\r\n private _selectMode: SelectMode = 'single';\r\n @Input()\r\n get selectMode(): SelectMode {\r\n return this._selectMode;\r\n }\r\n\r\n set selectMode(val: SelectMode) {\r\n this._selectMode = val;\r\n if (this.initiated) {\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n /** Текущая выбранная дата */\r\n private _selected: T | null;\r\n @Input()\r\n get selected(): T | null {\r\n return this._selected;\r\n }\r\n\r\n set selected(value: T | null) {\r\n const oldSelected = this._selected;\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._selected = this.getValidDate(value);\r\n\r\n if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {\r\n this.setSelectedDates();\r\n }\r\n }\r\n\r\n private _selecteds: T[] = [];\r\n @Input()\r\n get selecteds(): T[] {\r\n return this._selecteds;\r\n }\r\n\r\n set selecteds(values: T[]) {\r\n this._selecteds = (values ?? []).map(v => {\r\n v = this.dateTimeAdapter.deserialize(v);\r\n return this.getValidDate(v);\r\n });\r\n this.setSelectedDates();\r\n }\r\n\r\n private _pickerDateTime: T;\r\n @Input()\r\n get pickerDateTime() {\r\n return this._pickerDateTime;\r\n }\r\n\r\n set pickerDateTime(value: T) {\r\n const oldDateTime = this._pickerDateTime;\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._pickerDateTime =\r\n this.getValidDate(value) ?? this.dateTimeAdapter.now();\r\n\r\n this.firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this._pickerDateTime),\r\n this.dateTimeAdapter.getMonth(this._pickerDateTime),\r\n 1\r\n );\r\n\r\n if (\r\n !this.isSameMonth(oldDateTime, this._pickerDateTime) &&\r\n this.initiated\r\n ) {\r\n this.generateCalendar();\r\n }\r\n }\r\n\r\n /**\r\n * Функция, определяющая доступные для выбора даты\r\n * */\r\n private _dateFilter: (date: T) => boolean;\r\n @Input()\r\n get dateFilter() {\r\n return this._dateFilter;\r\n }\r\n\r\n set dateFilter(filter: (date: T) => boolean) {\r\n this._dateFilter = filter;\r\n if (this.initiated) {\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n /** Минимальная доступная для выбора дата */\r\n private _minDate: T | null;\r\n @Input()\r\n get minDate(): T | null {\r\n return this._minDate;\r\n }\r\n\r\n set minDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._minDate = this.getValidDate(value);\r\n if (this.initiated) {\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n /** Максимальная доступная для выбора дата */\r\n private _maxDate: T | null;\r\n @Input()\r\n get maxDate(): T | null {\r\n return this._maxDate;\r\n }\r\n\r\n set maxDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._maxDate = this.getValidDate(value);\r\n\r\n if (this.initiated) {\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n private _weekdays: Array<{ long: string; short: string; narrow: string }>;\r\n get weekdays() {\r\n return this._weekdays;\r\n }\r\n\r\n private _days: CalendarCell[][];\r\n get days() {\r\n return this._days;\r\n }\r\n\r\n get activeCell(): number {\r\n if (this.pickerDateTime != null) {\r\n return (\r\n this.dateTimeAdapter.getDate(this.pickerDateTime) +\r\n this.firstRowOffset -\r\n 1\r\n );\r\n }\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this.selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom' ||\r\n this.selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n private firstDateOfMonth: T;\r\n\r\n private localeSub: Subscription = Subscription.EMPTY;\r\n\r\n private initiated = false;\r\n\r\n private dateNames: string[];\r\n\r\n /**\r\n * Число месяца, соответствующее сегодняшней дате\r\n * */\r\n public todayDate: number | null;\r\n\r\n /**\r\n * Номера дней недели\r\n * */\r\n public weekNumbers: number[];\r\n\r\n /**\r\n * Массив значений selectedDates\r\n * Значение — номер дня в текущем месяце\r\n * */\r\n public selectedDates: number[] = [];\r\n\r\n // Индекс ячейки с первым днём месяца\r\n public firstRowOffset: number;\r\n\r\n /**\r\n * Обработчик выбора новой даты\r\n * */\r\n @Output()\r\n readonly selectedChange = new EventEmitter<T | null>();\r\n\r\n /**\r\n * Обработчик выбора любой даты\r\n * */\r\n @Output()\r\n readonly userSelection = new EventEmitter<void>();\r\n\r\n /** Событие активации любой даты */\r\n @Output()\r\n readonly pickerDateTimeChange: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n /** Тело таблицы календаря */\r\n @ViewChild(OwlCalendarBodyComponent, { static: true })\r\n calendarBodyElm: OwlCalendarBodyComponent;\r\n\r\n get owlDTCalendarView(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n private dateTimeFormats: OwlDateTimeFormats\r\n ) {}\r\n\r\n public ngOnInit() {\r\n this.updateFirstDayOfWeek(this.dateTimeAdapter.getLocale());\r\n this.generateWeekDays();\r\n\r\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(\r\n locale => {\r\n this.updateFirstDayOfWeek(locale);\r\n this.generateWeekDays();\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n );\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.generateCalendar();\r\n this.initiated = true;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.localeSub.unsubscribe();\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор ячейки календаря\r\n */\r\n public selectCalendarCell(cell: CalendarCell): void {\r\n // Условия, при которых дата не выбирается:\r\n // 1) Ячейка календаря недоступна для выбора\r\n // 2) Дата находится вне текущего месяца и включён hideOtherMonths\r\n if (!cell.enabled || (this.hideOtherMonths && cell.out)) {\r\n return;\r\n }\r\n\r\n this.selectDate(cell.value);\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор новой даты\r\n */\r\n private selectDate(date: number): void {\r\n const daysDiff = date - 1;\r\n const selected = this.dateTimeAdapter.addCalendarDays(\r\n this.firstDateOfMonth,\r\n daysDiff\r\n );\r\n\r\n this.selectedChange.emit(selected);\r\n this.userSelection.emit();\r\n }\r\n\r\n /**\r\n * Обрабатывает keydown в таблице календаря\r\n */\r\n public handleCalendarKeydown(event: KeyboardEvent): void {\r\n let dateTime;\r\n switch (event.keyCode) {\r\n // На один день назад\r\n case LEFT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n -1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один день вперёд\r\n case RIGHT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n 1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На одну неделю назад\r\n case UP_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n -7\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На одну неделю вперёд\r\n case DOWN_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n 7\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К первому дню текущего месяца\r\n case HOME:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n 1 - this.dateTimeAdapter.getDate(this.pickerDateTime)\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К последнему дню текущего месяца\r\n case END:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n this.dateTimeAdapter.getNumDaysInMonth(this.pickerDateTime) -\r\n this.dateTimeAdapter.getDate(this.pickerDateTime)\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один месяц (или год) назад\r\n case PAGE_UP:\r\n dateTime = event.altKey\r\n ? this.dateTimeAdapter.addCalendarYears(\r\n this.pickerDateTime,\r\n -1\r\n )\r\n : this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n -1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один месяц (или год) вперёд\r\n case PAGE_DOWN:\r\n dateTime = event.altKey\r\n ? this.dateTimeAdapter.addCalendarYears(\r\n this.pickerDateTime,\r\n 1\r\n )\r\n : this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n 1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // Выбирает активную дату\r\n case ENTER:\r\n if (this.isDateEnabled(this.dateTimeAdapter.addCalendarDays(\r\n this.firstDateOfMonth,\r\n this.dateTimeAdapter.getDate(this.pickerDateTime) - 1\r\n ))) {\r\n this.selectDate(\r\n this.dateTimeAdapter.getDate(this.pickerDateTime)\r\n );\r\n }\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this.focusActiveCell();\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Создаёт массив дней недели для календаря\r\n * */\r\n private generateWeekDays(): void {\r\n const longWeekdays = this.dateTimeAdapter.getDayOfWeekNames('long');\r\n const shortWeekdays = this.dateTimeAdapter.getDayOfWeekNames('short');\r\n const narrowWeekdays = this.dateTimeAdapter.getDayOfWeekNames('narrow');\r\n const firstDayOfWeek = this.firstDayOfWeek;\r\n\r\n const weekdays = longWeekdays.map((long, i) => {\r\n return { long, short: shortWeekdays[i], narrow: narrowWeekdays[i] };\r\n });\r\n\r\n this._weekdays = weekdays\r\n .slice(firstDayOfWeek-this.dateTimeAdapter.firstDayOfTheWeek)\r\n .concat(weekdays.slice(0, firstDayOfWeek-this.dateTimeAdapter.firstDayOfTheWeek));\r\n\r\n this.dateNames = this.dateTimeAdapter.getDateNames();\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Создаёт массив дней календаря\r\n * */\r\n private generateCalendar(): void {\r\n if (this.pickerDateTime == null) {\r\n return;\r\n }\r\n\r\n this.todayDate = null;\r\n this.weekNumbers = [];\r\n\r\n const startWeekdayOfMonth = this.dateTimeAdapter.getDay(\r\n this.firstDateOfMonth\r\n );\r\n const firstDayOfWeek = this.firstDayOfWeek;\r\n\r\n let daysDiff =\r\n 0 -\r\n ((startWeekdayOfMonth + (DAYS_PER_WEEK - firstDayOfWeek)) %\r\n DAYS_PER_WEEK);\r\n\r\n this.firstRowOffset = Math.abs(daysDiff);\r\n\r\n this._days = [];\r\n\r\n for (let i = 0; i < WEEKS_PER_VIEW; i++) {\r\n const week = [];\r\n const weekStartDate = this.dateTimeAdapter.addCalendarDays(\r\n this.firstDateOfMonth,\r\n daysDiff\r\n );\r\n\r\n for (let j = 0; j < DAYS_PER_WEEK; j++) {\r\n const date = this.dateTimeAdapter.addCalendarDays(\r\n this.firstDateOfMonth,\r\n daysDiff\r\n );\r\n\r\n const dateCell = this.createDateCell(date, daysDiff);\r\n\r\n if (\r\n this.dateTimeAdapter.isSameDay(\r\n this.dateTimeAdapter.now(),\r\n date\r\n )\r\n ) {\r\n this.todayDate = daysDiff + 1;\r\n }\r\n\r\n week.push(dateCell);\r\n daysDiff += 1;\r\n }\r\n\r\n this._days.push(week);\r\n\r\n if (this.showCalendarWeeks) {\r\n const weekNumber = this.getISOWeekFromDate(weekStartDate);\r\n this.weekNumbers.push(weekNumber);\r\n }\r\n }\r\n\r\n this.setSelectedDates();\r\n }\r\n\r\n public getISOWeek(d: Date): number {\r\n const clonedDate = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\r\n // Используем для воскресенья номер дня 7\r\n clonedDate.setUTCDate(clonedDate.getUTCDate() + 4 - (clonedDate.getUTCDay()||7));\r\n // Получаем первый день года\r\n const yearStart = new Date(Date.UTC(clonedDate.getUTCFullYear(),0,1));\r\n // Вычисляем число полных недель до ближайшего четверга\r\n const weekNo = Math.ceil(( ( (+clonedDate - +yearStart) / 86400000) + 1)/7);\r\n return weekNo;\r\n }\r\n\r\n private updateFirstDayOfWeek(locale: string): void {\r\n if (this.isDefaultFirstDayOfWeek) {\r\n try {\r\n this._firstDayOfWeek = getLocaleFirstDayOfWeek(locale);\r\n } catch {\r\n this._firstDayOfWeek = 0;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Создаёт CalendarCell для дней\r\n */\r\n private createDateCell(date: T, daysDiff: number): CalendarCell {\r\n // Количество дней в месяце\r\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(\r\n this.pickerDateTime\r\n );\r\n const dateNum = this.dateTimeAdapter.getDate(date);\r\n // const dateName = this.dateNames[dateNum - 1];\r\n const dateName = dateNum.toString();\r\n const ariaLabel = this.dateTimeAdapter.format(\r\n date,\r\n this.dateTimeFormats.dateA11yLabel\r\n );\r\n\r\n // Проверяем доступность даты для выбора\r\n const enabled = this.isDateEnabled(date);\r\n\r\n // Проверяем, находится ли дата вне текущего месяца\r\n const dayValue = daysDiff + 1;\r\n const out = dayValue < 1 || dayValue > daysInMonth;\r\n const cellClass = 'owl-dt-day-' + this.dateTimeAdapter.getDay(date);\r\n\r\n return new CalendarCell(\r\n dayValue,\r\n dateName,\r\n ariaLabel,\r\n enabled,\r\n out,\r\n cellClass\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет допустимость даты\r\n */\r\n private isDateEnabled(date: T): boolean {\r\n return (\r\n date != null &&\r\n (!this.dateFilter || this.dateFilter(date)) &&\r\n (this.minDate == null ||\r\n this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\r\n (this.maxDate == null ||\r\n this.dateTimeAdapter.compare(date, this.maxDate) <= 0)\r\n );\r\n }\r\n\r\n /**\r\n * Возвращает корректный объект даты\r\n */\r\n private getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n\r\n /**\r\n * Проверяет, что даты не равны null и находятся в одном месяце\r\n */\r\n public isSameMonth(dateLeft: T, dateRight: T): boolean {\r\n return (\r\n dateLeft != null &&\r\n dateRight != null &&\r\n this.dateTimeAdapter.isValid(dateLeft) &&\r\n this.dateTimeAdapter.isValid(dateRight) &&\r\n this.dateTimeAdapter.getYear(dateLeft) ===\r\n this.dateTimeAdapter.getYear(dateRight) &&\r\n this.dateTimeAdapter.getMonth(dateLeft) ===\r\n this.dateTimeAdapter.getMonth(dateRight)\r\n );\r\n }\r\n\r\n private getISOWeekFromDate(date: T): number {\r\n const jsDate = new Date(Date.UTC(\r\n this.dateTimeAdapter.getYear(date),\r\n this.dateTimeAdapter.getMonth(date),\r\n this.dateTimeAdapter.getDate(date),\r\n ));\r\n\r\n jsDate.setUTCDate(\r\n jsDate.getUTCDate() + 4 - (jsDate.getUTCDay() || 7)\r\n );\r\n\r\n const yearStart = new Date(Date.UTC(jsDate.getUTCFullYear(), 0, 1));\r\n\r\n return Math.ceil((((+jsDate - +yearStart) / 86400000) + 1) / 7);\r\n }\r\n\r\n /**\r\n * Задаёт значение selectedDates\r\n * В режиме single содержит одно значение — выбранную дату\r\n * В режиме range содержит два значения: fromValue и toValue\r\n * */\r\n private setSelectedDates(): void {\r\n this.selectedDates = [];\r\n\r\n if (this.firstDateOfMonth == null) {\r\n return;\r\n }\r\n\r\n if (this.isInSingleMode && this.selected != null) {\r\n const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(\r\n this.selected,\r\n this.firstDateOfMonth\r\n );\r\n this.selectedDates[0] = dayDiff + 1;\r\n return;\r\n }\r\n\r\n if (this.isInRangeMode && this.selecteds) {\r\n this.selectedDates = this.selecteds.map(selected => {\r\n if (this.dateTimeAdapter.isValid(selected)) {\r\n const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(\r\n selected,\r\n this.firstDateOfMonth\r\n );\r\n return dayDiff + 1;\r\n } else {\r\n return null;\r\n }\r\n });\r\n }\r\n }\r\n\r\n private focusActiveCell() {\r\n this.calendarBodyElm.focusActiveCell();\r\n }\r\n}\r\n","@if (showCalendarWeeks) {\r\n <ul class=\"week-number\">\r\n @for (week of weekNumbers; track week) {\r\n <li>\r\n <span>{{ week }}</span>\r\n </li>\r\n }\r\n </ul>\r\n}\r\n<table\r\n class=\"owl-dt-calendar-table owl-dt-calendar-month-table\"\r\n [ngClass]=\"{ 'owl-calendar-weeks': showCalendarWeeks }\"\r\n [class.owl-dt-calendar-only-current-month]=\"hideOtherMonths\"\r\n>\r\n <thead class=\"owl-dt-calendar-header\">\r\n <tr class=\"owl-dt-weekdays\">\r\n @for (weekday of weekdays; track weekday.short) {\r\n <th\r\n [attr.aria-label]=\"weekday.long\"\r\n class=\"owl-dt-weekday\"\r\n scope=\"col\"\r\n >\r\n <span>{{ weekday.short }}</span>\r\n </th>\r\n }\r\n </tr>\r\n <tr>\r\n <th\r\n class=\"owl-dt-calendar-table-divider\"\r\n [ngClass]=\"{ 'owl-calendar-weeks': showCalendarWeeks }\"\r\n aria-hidden=\"true\"\r\n colspan=\"7\"\r\n ></th>\r\n </tr>\r\n </thead>\r\n <tbody\r\n owl-date-time-calendar-body\r\n role=\"grid\"\r\n [rows]=\"days\"\r\n [todayValue]=\"todayDate\"\r\n [selectedValues]=\"selectedDates\"\r\n [selectMode]=\"selectMode\"\r\n [activeCell]=\"activeCell\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\"\r\n ></tbody>\r\n</table>\r\n","/**\r\n * calendar.component\r\n */\r\n\r\nimport {\r\n afterNextRender,\r\n AfterRenderRef,\r\n inject,\r\n Injector,\r\n DestroyRef,\r\n AfterContentInit,\r\n AfterViewChecked,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output\r\n} from '@angular/core';\r\nimport {OwlDateTimeIntl} from './date-time-picker-intl.service';\r\nimport {DateTimeAdapter} from './adapter/date-time-adapter.class';\r\nimport {OWL_DATE_TIME_FORMATS, OwlDateTimeFormats} from './adapter/date-time-format.class';\r\nimport {DateView, DateViewType, SelectMode} from './date-time.class';\r\nimport {Subscription} from 'rxjs';\r\n\r\n@Component({\r\n selector: 'owl-date-time-calendar',\r\n exportAs: 'owlDateTimeCalendar',\r\n templateUrl: './calendar.component.html',\r\n styleUrls: ['./calendar.component.scss'],\r\n standalone: false,\r\n host: {\r\n '[class.owl-dt-calendar]': 'owlDTCalendarClass'\r\n },\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OwlCalendarComponent<T>\r\n implements OnInit, AfterContentInit, AfterViewChecked, OnDestroy {\r\n\r\n private readonly injector = inject(Injector);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private focusRef: AfterRenderRef | undefined;\r\n\r\n DateView = DateView;\r\n\r\n @Input()\r\n get minDate(): T | null {\r\n return this._minDate;\r\n }\r\n\r\n set minDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n value = this.getValidDate(value);\r\n\r\n this._minDate = value != null\r\n ? this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(value),\r\n this.dateTimeAdapter.getMonth(value),\r\n this.dateTimeAdapter.getDate(value)\r\n )\r\n : null;\r\n }\r\n\r\n @Input()\r\n get maxDate(): T | null {\r\n return this._maxDate;\r\n }\r\n\r\n set maxDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n value = this.getValidDate(value);\r\n\r\n this._maxDate = value != null\r\n ? this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(value),\r\n this.dateTimeAdapter.getMonth(value),\r\n this.dateTimeAdapter.getDate(value)\r\n )\r\n : null;\r\n }\r\n\r\n @Input()\r\n get pickerDateTime() {\r\n return this._pickerDateTime;\r\n }\r\n\r\n set pickerDateTime(value: T) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._pickerDateTime =\r\n this.getValidDate(value) ?? this.dateTimeAdapter.now();\r\n }\r\n\r\n @Input()\r\n get selected(): T | null {\r\n return this._selected;\r\n }\r\n\r\n set selected(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._selected = this.getValidDate(value);\r\n }\r\n\r\n @Input()\r\n get selecteds(): T[] {\r\n return this._selecteds;\r\n }\r\n\r\n set selecteds(values: T[]) {\r\n this._selecteds = (values ?? []).map(v => {\r\n v = this.dateTimeAdapter.deserialize(v);\r\n return this.getValidDate(v);\r\n });\r\n }\r\n\r\n get periodButtonText(): string {\r\n return this.isMonthView\r\n ? this.dateTimeAdapter.format(\r\n this.pickerDateTime,\r\n this.dateTimeFormats.monthYearLabel\r\n )\r\n : this.dateTimeAdapter.getYearName(this.pickerDateTime);\r\n }\r\n\r\n get periodButtonLabel(): string {\r\n return this.isMonthView\r\n ? this.pickerIntl.switchToMultiYearViewLabel\r\n : this.pickerIntl.switchToMonthViewLabel;\r\n }\r\n\r\n get prevButtonLabel(): string {\r\n if (this._currentView === DateView.MONTH) {\r\n return this.pickerIntl.prevMonthLabel;\r\n } else if (this._currentView === DateView.YEAR) {\r\n return this.pickerIntl.prevYearLabel;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n get nextButtonLabel(): string {\r\n if (this._currentView === DateView.MONTH) {\r\n return this.pickerIntl.nextMonthLabel;\r\n } else if (this._currentView === DateView.YEAR) {\r\n return this.pickerIntl.nextYearLabel;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n get currentView(): DateViewType {\r\n return this._currentView;\r\n }\r\n\r\n set currentView(view: DateViewType) {\r\n this._currentView = view;\r\n this.moveFocusOnNextTick = true;\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this.selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom' ||\r\n this.selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n get showControlArrows(): boolean {\r\n return this._currentView !== DateView.MULTI_YEARS;\r\n }\r\n\r\n get isMonthView() {\r\n return this._currentView === DateView.MONTH;\r\n }\r\n\r\n /**\r\n * Добавляет класс 'owl-dt-calendar' к элементу компонента\r\n * */\r\n get owlDTCalendarClass(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(\r\n private elmRef: ElementRef<HTMLElement>,\r\n private pickerIntl: OwlDateTimeIntl,\r\n private ngZone: NgZone,\r\n private cdRef: ChangeDetectorRef,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n private dateTimeFormats: OwlDateTimeFormats\r\n ) {\r\n this.intlChangesSub = this.pickerIntl.changes.subscribe(() => {\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n /**\r\n * Фильтр дат для представлений месяца и года\r\n * */\r\n @Input()\r\n dateFilter: (date: T) => boolean;\r\n\r\n /**\r\n * Задаёт первый день недели\r\n */\r\n @Input()\r\n firstDayOfWeek: number;\r\n\r\n /** Минимальная доступная для выбора дата */\r\n private _minDate: T | null;\r\n\r\n /** Максимальная доступная для выбора дата */\r\n private _maxDate: T | null;\r\n\r\n /** Дата и время, отображаемые в компоненте выбора */\r\n private _pickerDateTime: T;\r\n\r\n @Input()\r\n selectMode: SelectMode;\r\n\r\n /** Текущие выбранные дата и время */\r\n private _selected: T | null;\r\n\r\n private _selecteds: T[] = [];\r\n\r\n /**\r\n * Начальное представление календаря\r\n */\r\n @Input()\r\n startView: DateViewType = DateView.MONTH;\r\n\r\n /**\r\n * Нужно ли показывать только представления года и нескольких лет\r\n */\r\n @Input()\r\n yearOnly = false;\r\n\r\n /**\r\n * Нужно ли показывать номера недель в календаре\r\n * */\r\n @Input()\r\n showCalendarWeeks = false;\r\n\r\n /**\r\n * Нужно ли показывать только представление нескольких лет\r\n */\r\n @Input()\r\n multiyearOnly = false;\r\n\r\n /**\r\n * Нужно ли скрывать даты соседних месяцев в начале или конце текущего месяца\r\n * */\r\n @Input()\r\n hideOtherMonths: boolean;\r\n\r\n /** Событие изменения отображаемых даты и времени */\r\n @Output()\r\n pickerDateTimeChange = new EventEmitter<T>();\r\n\r\n /** Событие изменения выбранной даты */\r\n @Output()\r\n readonly dateClicked = new EventEmitter<T>();\r\n\r\n /** Событие изменения текущей выбранной даты */\r\n @Output()\r\n readonly selectedChange = new EventEmitter<T>();\r\n\r\n /** Событие выбора любой даты */\r\n @Output()\r\n readonly userSelection = new EventEmitter<void>();\r\n\r\n /**\r\n * Передаёт выбранный год, не изменяя выбранную дату\r\n * */\r\n @Output()\r\n readonly yearSelected = new EventEmitter<T>();\r\n\r\n /**\r\n * Передаёт выбранный месяц, не изменяя выбранную дату\r\n * */\r\n @Output()\r\n readonly monthSelected = new EventEmitter<T>();\r\n\r\n private _currentView: DateViewType;\r\n\r\n private intlChangesSub = Subscription.EMPTY;\r\n\r\n /**\r\n * Откладывает перевод фокуса на активную ячейку до следующего обновления представления\r\n * Перевод фокуса откладывается, чтобы дождаться, пока Angular\r\n * обновит дочерние элементы представления\r\n */\r\n private moveFocusOnNextTick = false;\r\n\r\n /**\r\n * Фильтр дат для представлений месяца и года\r\n */\r\n public dateFilterForViews = (date: T) => {\r\n return (\r\n date != null &&\r\n (!this.dateFilter || this.dateFilter(date)) &&\r\n (this.minDate == null ||\r\n this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\r\n (this.maxDate == null ||\r\n this.dateTimeAdapter.compare(date, this.maxDate) <= 0)\r\n );\r\n };\r\n\r\n public ngOnInit() {\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this._currentView = this.startView;\r\n }\r\n\r\n public ngAfterViewChecked() {\r\n if (this.moveFocusOnNextTick) {\r\n this.moveFocusOnNextTick = false;\r\n this.focusActiveCell();\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.intlChangesSub.unsubscribe();\r\n }\r\n\r\n /**\r\n * Переключает представления месяца и года\r\n */\r\n public toggleViews(): void {\r\n let nextView = null;\r\n if (this._currentView === DateView.MONTH) {\r\n nextView = DateView.MULTI_YEARS;\r\n } else {\r\n if (this.multiyearOnly) {\r\n nextView = DateView.MULTI_YEARS;\r\n } else if (this.yearOnly) {\r\n nextView = this._currentView === DateView.YEAR ? DateView.MULTI_YEARS : DateView.YEAR;\r\n } else {\r\n nextView = DateView.MONTH;\r\n }\r\n }\r\n this.currentView = nextView;\r\n }\r\n\r\n /**\r\n * Обрабатывает нажатие кнопки перехода к предыдущему периоду\r\n * */\r\n public previousClicked(): void {\r\n this.pickerDateTime = this.isMonthView\r\n ? this.dateTimeAdapter.addCalendarMonths(this.pickerDateTime, -1)\r\n : this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, -1);\r\n\r\n this.pickerDateTimeChange.emit(this.pickerDateTime);\r\n }\r\n\r\n /**\r\n * Обрабатывает нажатие кнопки перехода к следующему периоду\r\n * */\r\n public nextClicked(): void {\r\n this.pickerDateTime = this.isMonthView\r\n ? this.dateTimeAdapter.addCalendarMonths(this.pickerDateTime, 1)\r\n : this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, 1);\r\n\r\n this.pickerDateTimeChange.emit(this.pickerDateTime);\r\n }\r\n\r\n public dateSelected(date: T): void {\r\n if (!this.dateFilterForViews(date)) {\r\n return;\r\n }\r\n\r\n this.dateClicked.emit(date);\r\n this.selectedChange.emit(date);\r\n\r\n /*if ((this.isInSingleMode && !this.dateTimeAdapter.isSameDay(date, this.selected)) ||\r\n this.isInRangeMode) {\r\n this.selectedChange.emit(date);\r\n }*/\r\n }\r\n\r\n /**\r\n * Меняет отображаемую дату и переключается на указанное представление\r\n */\r\n public goToDateInView(\r\n date: T,\r\n view: DateViewType\r\n ): void {\r\n this.handlePickerDateTimeChange(date);\r\n if ((!this.yearOnly && !this.multiyearOnly) ||\r\n (this.multiyearOnly && (view !== DateView.MONTH && view !== DateView.YEAR)) ||\r\n (this.yearOnly && view !== DateView.MONTH)) {\r\n this.currentView = view;\r\n } else {\r\n this.dateSelected(date);\r\n }\r\n return;\r\n }\r\n\r\n /**\r\n * Меняет отображаемую дату\r\n */\r\n public handlePickerDateTimeChange(date: T): void {\r\n this.pickerDateTime = this.dateTimeAdapter.clampDate(\r\n date,\r\n this.minDate,\r\n this.maxDate\r\n );\r\n this.pickerDateTimeChange.emit(this.pickerDateTime);\r\n return;\r\n }\r\n\r\n public userSelected(): void {\r\n this.userSelection.emit();\r\n }\r\n\r\n /**\r\n * Доступна ли кнопка перехода к предыдущему периоду\r\n */\r\n public prevButtonEnabled(): boolean {\r\n return (\r\n this.minDate == null || !this.isSameView(this.pickerDateTime, this.minDate)\r\n );\r\n }\r\n\r\n /**\r\n * Доступна ли кнопка перехода к следующему периоду\r\n */\r\n public nextButtonEnabled(): boolean {\r\n return (\r\n this.maxDate == null || !this.isSameView(this.pickerDateTime, this.maxDate)\r\n );\r\n }\r\n\r\n /**\r\n * Переводит фокус на элемент компонента\r\n * */\r\n public focusActiveCell() {\r\n if (this.destroyRef.destroyed) {\r\n return;\r\n }\r\n\r\n this.focusRef?.destroy();\r\n this.focusRef = afterNextRender({\r\n write: () => {\r\n this.focusRef = undefined;\r\n this.elmRef.nativeElement.querySelector<HTMLElement>('.owl-dt-calendar-cell-active')?.focus();\r\n }\r\n }, { injector: this.injector });\r\n }\r\n\r\n public selectYearInMultiYearView(normalizedYear: T): void {\r\n this.yearSelected.emit(normalizedYear);\r\n }\r\n\r\n public selectMonthInYearView(normalizedMonth: T): void {\r\n this.monthSelected.emit(normalizedMonth);\r\n }\r\n\r\n /**\r\n * Соответствуют ли две даты одному представлению в текущем режиме (месяц или год)\r\n */\r\n private isSameView(date1: T, date2: T): boolean {\r\n if (this._currentView === DateView.MONTH) {\r\n return !!(\r\n date1 != null &&\r\n date2 != null &&\r\n this.dateTimeAdapter.getYear(date1) ===\r\n this.dateTimeAdapter.getYear(date2) &&\r\n this.dateTimeAdapter.getMonth(date1) ===\r\n this.dateTimeAdapter.getMonth(date2)\r\n );\r\n } else if (this._currentView === DateView.YEAR) {\r\n return !!(\r\n date1 != null &&\r\n date2 != null &&\r\n this.dateTimeAdapter.getYear(date1) ===\r\n this.dateTimeAdapter.getYear(date2)\r\n );\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Возвращает корректный объект даты\r\n */\r\n private getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n}\r\n","<div class=\"owl-dt-calendar-control\">\r\n <!-- Фокус при навигации клавишей Tab (http://kizu.ru/en/blog/keyboard-only-focus/#x) -->\r\n <button\r\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [style.visibility]=\"showControlArrows ? 'visible' : 'hidden'\"\r\n [disabled]=\"!prevButtonEnabled()\"\r\n [attr.aria-label]=\"prevButtonLabel\"\r\n (click)=\"previousClicked()\"\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-control-button-content\"\r\n tabindex=\"-1\"\r\n >\r\n <!-- <editor-fold desc=\"SVG-стрелка влево\"> -->\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background: new 0 0 250.738 250.738\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n >\r\n <path\r\n style=\"fill-rule: evenodd; clip-rule: evenodd\"\r\n d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\"\r\n />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </button>\r\n <div class=\"owl-dt-calendar-control-content\">\r\n <button\r\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-period-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"periodButtonLabel\"\r\n (click)=\"toggleViews()\"\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-control-button-content\"\r\n tabindex=\"-1\"\r\n >\r\n {{ periodButtonText }}\r\n\r\n <span\r\n class=\"owl-dt-control-button-arrow\"\r\n [style.transform]=\"\r\n 'rotate(' + (isMonthView ? 0 : 180) + 'deg)'\r\n \"\r\n >\r\n <!-- <editor-fold desc=\"SVG-стрелка\"> -->\r\n <svg\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n width=\"50%\"\r\n height=\"50%\"\r\n viewBox=\"0 0 292.362 292.362\"\r\n style=\"enable-background: new 0 0 292.362 292.362\"\r\n xml:space=\"preserve\"\r\n >\r\n <g>\r\n <path\r\n d=\"M286.935,69.377c-3.614-3.617-7.898-5.424-12.848-5.424H18.274c-4.952,0-9.233,1.807-12.85,5.424\r\n C1.807,72.998,0,77.279,0,82.228c0,4.948,1.807,9.229,5.424,12.847l127.907,127.907c3.621,3.617,7.902,5.428,12.85,5.428\r\n s9.233-1.811,12.847-5.428L286.935,95.074c3.613-3.617,5.427-7.898,5.427-12.847C292.362,77.279,290.548,72.998,286.935,69.377z\"\r\n />\r\n </g>\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </span>\r\n </button>\r\n </div>\r\n <button\r\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [style.visibility]=\"showControlArrows ? 'visible' : 'hidden'\"\r\n [disabled]=\"!nextButtonEnabled()\"\r\n [attr.aria-label]=\"nextButtonLabel\"\r\n (click)=\"nextClicked()\"\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-control-button-content\"\r\n tabindex=\"-1\"\r\n >\r\n <!-- <editor-fold desc=\"SVG-стрелка вправо\"> -->\r\n <svg\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background: new 0 0 250.738 250.738\"\r\n xml:space=\"preserve\"\r\n >\r\n <path\r\n style=\"fill-rule: evenodd; clip-rule: evenodd\"\r\n d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\r\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\r\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\r\n C197.237,120.447,195.534,115.448,191.75,111.689z\"\r\n />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </button>\r\n</div>\r\n<div class=\"owl-dt-calendar-main\" cdkMonitorSubtreeFocus tabindex=\"-1\">\r\n @switch (currentView) {\r\n @case (DateView.MONTH) {\r\n <owl-date-time-month-view\r\n [pickerDateTime]=\"pickerDateTime\"\r\n [firstDayOfWeek]=\"firstDayOfWeek\"\r\n [selected]=\"selected\"\r\n [selecteds]=\"selecteds\"\r\n [selectMode]=\"selectMode\"\r\n [minDate]=\"minDate\"\r\n [showCalendarWeeks]=\"showCalendarWeeks\"\r\n [maxDate]=\"maxDate\"\r\n [dateFilter]=\"dateFilter\"\r\n [hideOtherMonths]=\"hideOtherMonths\"\r\n (pickerDateTimeChange)=\"handlePickerDateTimeChange($event)\"\r\n (selectedChange)=\"dateSelected($event)\"\r\n (userSelection)=\"userSelected()\"\r\n ></owl-date-time-month-view>\r\n }\r\n @case (DateView.YEAR) {\r\n <owl-date-time-year-view\r\n [pickerDateTime]=\"pickerDateTime\"\r\n [selected]=\"selected\"\r\n [selecteds]=\"selecteds\"\r\n [selectMode]=\"selectMode\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [dateFilter]=\"dateFilter\"\r\n (keyboardEnter)=\"focusActiveCell()\"\r\n (pickerDateTimeChange)=\"handlePickerDateTimeChange($event)\"\r\n (monthSelected)=\"selectMonthInYearView($event)\"\r\n (change)=\"goToDateInView($event, DateView.MONTH)\"\r\n ></owl-date-time-year-view>\r\n }\r\n @case (DateView.MULTI_YEARS) {\r\n <owl-date-time-multi-year-view\r\n [pickerDateTime]=\"pickerDateTime\"\r\n [selected]=\"selected\"\r\n [selecteds]=\"selecteds\"\r\n [selectMode]=\"selectMode\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [dateFilter]=\"dateFilter\"\r\n (keyboardEnter)=\"focusActiveCell()\"\r\n (pickerDateTimeChange)=\"handlePickerDateTimeChange($event)\"\r\n (yearSelected)=\"selectYearInMultiYearView($event)\"\r\n (change)=\"goToDateInView($event, DateView.YEAR)\"\r\n ></owl-date-time-multi-year-view>\r\n }\r\n }\r\n</div>\r\n","/**\r\n * timer-box.component\r\n */\r\n\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n ElementRef,\r\n ViewChild,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n@Component({\r\n exportAs: 'owlDateTimeTimerBox',\r\n selector: 'owl-date-time-timer-box',\r\n templateUrl: './timer-box.component.html',\r\n styleUrls: ['./timer-box.component.scss'],\r\n standalone: false,\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.owl-dt-timer-box]': 'owlDTTimerBoxClass'\r\n }\r\n})\r\n\r\nexport class OwlTimerBoxComponent implements OnInit, OnDestroy {\r\n\r\n @Input() showDivider = false;\r\n\r\n @Input() upBtnAriaLabel: string;\r\n\r\n @Input() upBtnDisabled: boolean;\r\n\r\n @Input() downBtnAriaLabel: string;\r\n\r\n @Input() downBtnDisabled: boolean;\r\n\r\n /**\r\n * Значение, отображаемое в поле\r\n * Если равно null, в поле отображается [value]\r\n * */\r\n @Input() boxValue: number;\r\n\r\n @Input() value: number;\r\n\r\n @Input() min: number;\r\n\r\n @Input() max: number;\r\n\r\n @Input() step = 1;\r\n\r\n @Input() inputLabel: string;\r\n\r\n @Output() valueChange = new EventEmitter<number>();\r\n\r\n @Output() inputChange = new EventEmitter<number>();\r\n\r\n private inputStream = new Subject<string>();\r\n\r\n private inputStreamSub = Subscription.EMPTY;\r\n\r\n private isEditing = false;\r\n\r\n get displayValue(): string {\r\n if (this.isEditing) {\r\n // Не переформатируем значение, пока пользователь его редактирует\r\n return this.valueInput.nativeElement.value;\r\n }\r\n\r\n const value = this.boxValue ?? this.value;\r\n\r\n if (value == null || isNaN(value)) {\r\n return '';\r\n }\r\n\r\n return value < 10 ? '0' + value.toString() : value.toString();\r\n }\r\n\r\n get owlDTTimerBoxClass(): boolean {\r\n return true;\r\n }\r\n\r\n @ViewChild('valueInput', { static: true })\r\n private valueInput: ElementRef<HTMLInputElement>;\r\n private onValueInputMouseWheelBind = this.onValueInputMouseWheel.bind(this);\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {\r\n }\r\n\r\n public ngOnInit() {\r\n this.inputStreamSub = this.inputStream.pipe(debounceTime(750)).subscribe(( val: string ) => {\r\n if (val) {\r\n const inputValue = coerceNumberProperty(val, 0);\r\n this.updateValueViaInput(inputValue);\r\n }\r\n });\r\n this.bindValueInputMouseWheel();\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.unbindValueInputMouseWheel();\r\n this.inputStreamSub.unsubscribe();\r\n }\r\n\r\n public upBtnClicked(): void {\r\n this.updateValue(this.value + this.step);\r\n }\r\n\r\n public downBtnClicked(): void {\r\n this.updateValue(this.value - this.step);\r\n }\r\n\r\n public handleInputChange(val: string ): void {\r\n this.isEditing = true;\r\n this.inputStream.next(val);\r\n }\r\n\r\n public focusIn(): void {\r\n this.isEditing = true;\r\n }\r\n\r\n public focusOut(value: string): void {\r\n const wasEditing = this.isEditing;\r\n this.isEditing = false;\r\n // Отменяем ожидающий debounce: blur сразу фиксирует текущий текст\r\n this.inputStream.next('');\r\n if (wasEditing && value) {\r\n const inputValue = coerceNumberProperty(value, 0);\r\n this.updateValueViaInput(inputValue);\r\n }\r\n }\r\n\r\n private updateValue( value: number ): void {\r\n // Шаг заменяет введённый текст; отложенный input и blur не должны откатывать значение\r\n this.isEditing = false;\r\n this.inputStream.next('');\r\n this.valueChange.emit(value);\r\n }\r\n\r\n private updateValueViaInput( value: number ): void {\r\n if (value > this.max || value < this.min) {\r\n return;\r\n }\r\n this.inputChange.emit(value);\r\n }\r\n\r\n private onValueInputMouseWheel( event: any ): void {\r\n event = event || window.event;\r\n const delta = event.deltaY != null ? -event.deltaY : event.wheelDelta || -event.detail;\r\n\r\n if (delta > 0) {\r\n if (!this.upBtnDisabled) {\r\n this.upBtnClicked();\r\n }\r\n } else if (delta < 0) {\r\n if (!this.downBtnDisabled) {\r\n this.downBtnClicked();\r\n }\r\n }\r\n\r\n this.changeDetector.markForCheck();\r\n event.preventDefault ? event.preventDefault() : (event.returnValue = false);\r\n }\r\n\r\n private bindValueInputMouseWheel(): void {\r\n this.valueInput.nativeElement.addEventListener(\r\n 'onwheel' in this.valueInput.nativeElement.ownerDocument ? 'wheel' : 'mousewheel',\r\n this.onValueInputMouseWheelBind);\r\n }\r\n\r\n private unbindValueInputMouseWheel(): void {\r\n this.valueInput.nativeElement.removeEventListener(\r\n 'onwheel' in this.valueInput.nativeElement.ownerDocument ? 'wheel' : 'mousewheel',\r\n this.onValueInputMouseWheelBind);\r\n }\r\n}\r\n","@if (showDivider) {\r\n <div class=\"owl-dt-timer-divider\" aria-hidden=\"true\"></div>\r\n}\r\n<button\r\n class=\"owl-dt-control-button owl-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [disabled]=\"upBtnDisabled\"\r\n [attr.aria-label]=\"upBtnAriaLabel\"\r\n (click)=\"upBtnClicked()\"\r\n>\r\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG-стрелка вверх\"> -->\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 451.847 451.846\"\r\n style=\"enable-background: new 0 0 451.847 451.846\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n >\r\n <path\r\n d=\"M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0\r\n L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4\r\n c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z\"\r\n />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n<label class=\"owl-dt-timer-content\">\r\n <input\r\n class=\"owl-dt-timer-input\"\r\n maxlength=\"2\"\r\n [value]=\"displayValue\"\r\n (keydown.arrowup)=\"!upBtnDisabled && upBtnClicked()\"\r\n (keydown.arrowdown)=\"!downBtnDisabled && downBtnClicked()\"\r\n (input)=\"handleInputChange(valueInput.value)\"\r\n (focusin)=\"focusIn()\"\r\n (focusout)=\"focusOut(valueInput.value)\"\r\n #valueInput\r\n />\r\n <span class=\"owl-hidden-accessible\">{{ inputLabel }}</span>\r\n</label>\r\n<button\r\n class=\"owl-dt-control-button owl-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [disabled]=\"downBtnDisabled\"\r\n [attr.aria-label]=\"downBtnAriaLabel\"\r\n (click)=\"downBtnClicked()\"\r\n>\r\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG-стрелка вниз\"> -->\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 451.847 451.846\"\r\n style=\"enable-background: new 0 0 451.847 451.846\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n >\r\n <path\r\n d=\"M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751\r\n c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0\r\n c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z\"\r\n />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n","/**\r\n * timer.component\r\n */\r\n\r\nimport {\r\n afterNextRender,\r\n AfterRenderRef,\r\n inject,\r\n Injector,\r\n DestroyRef,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output\r\n} from '@angular/core';\r\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n exportAs: 'owlDateTimeTimer',\r\n selector: 'owl-date-time-timer',\r\n templateUrl: './timer.component.html',\r\n styleUrls: ['./timer.component.scss'],\r\n preserveWhitespaces: false,\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.owl-dt-timer]': 'owlDTTimerClass',\r\n '[attr.tabindex]': 'owlDTTimeTabIndex'\r\n }\r\n})\r\nexport class OwlTimerComponent<T> implements OnInit, OnDestroy {\r\n private readonly injector = inject(Injector);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private focusRef: AfterRenderRef | undefined;\r\n private intlChangesSub = Subscription.EMPTY;\r\n\r\n /** Дата и время, отображаемые в компоненте выбора */\r\n private _pickerDateTime: T;\r\n @Input()\r\n get pickerDateTime() {\r\n return this._pickerDateTime;\r\n }\r\n\r\n set pickerDateTime(value: T) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._pickerDateTime =\r\n this.getValidDate(value) ?? this.dateTimeAdapter.now();\r\n }\r\n\r\n /** Минимальные доступные для выбора дата и время */\r\n private _minDateTime: T | null;\r\n @Input()\r\n get minDateTime(): T | null {\r\n return this._minDateTime;\r\n }\r\n\r\n set minDateTime(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._minDateTime = this.getValidDate(value);\r\n }\r\n\r\n /** Максимальные доступные для выбора дата и время */\r\n private _maxDateTime: T | null;\r\n @Input()\r\n get maxDateTime(): T | null {\r\n return this._maxDateTime;\r\n }\r\n\r\n set maxDateTime(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._maxDateTime = this.getValidDate(value);\r\n }\r\n\r\n private isPM = false; // Относится ли текущее время к PM в 12-часовом формате\r\n\r\n /**\r\n * Нужно ли показывать поле секунд\r\n */\r\n @Input()\r\n showSecondsTimer: boolean;\r\n\r\n /**\r\n * Используется ли 12-часовой формат времени\r\n */\r\n @Input()\r\n hour12Timer: boolean;\r\n\r\n /**\r\n * Количество часов за один шаг\r\n */\r\n @Input()\r\n stepHour = 1;\r\n\r\n /**\r\n * Количество минут за один шаг\r\n */\r\n @Input()\r\n stepMinute = 1;\r\n\r\n /**\r\n * Количество секунд за один шаг\r\n */\r\n @Input()\r\n stepSecond = 1;\r\n\r\n get hourValue(): number {\r\n return this.dateTimeAdapter.getHours(this.pickerDateTime);\r\n }\r\n\r\n /**\r\n * Значение, отображаемое в hourBox\r\n * Оно требуется, поскольку значение в hourBox отличается\r\n * от hourValue в режиме hour12Timer\r\n * */\r\n get hourBoxValue(): number {\r\n let hours = this.hourValue;\r\n\r\n if (!this.hour12Timer) {\r\n return hours;\r\n } else {\r\n if (hours === 0) {\r\n hours = 12;\r\n this.isPM = false;\r\n } else if (hours > 0 && hours < 12) {\r\n this.isPM = false;\r\n } else if (hours === 12) {\r\n this.isPM = true;\r\n } else if (hours > 12 && hours < 24) {\r\n hours = hours - 12;\r\n this.isPM = true;\r\n }\r\n\r\n return hours;\r\n }\r\n }\r\n\r\n get minuteValue(): number {\r\n return this.dateTimeAdapter.getMinutes(this.pickerDateTime);\r\n }\r\n\r\n get secondValue(): number {\r\n return this.dateTimeAdapter.getSeconds(this.pickerDateTime);\r\n }\r\n\r\n get upHourButtonLabel(): string {\r\n return this.pickerIntl.upHourLabel;\r\n }\r\n\r\n get downHourButtonLabel(): string {\r\n return this.pickerIntl.downHourLabel;\r\n }\r\n\r\n get upMinuteButtonLabel(): string {\r\n return this.pickerIntl.upMinuteLabel;\r\n }\r\n\r\n get downMinuteButtonLabel(): string {\r\n return this.pickerIntl.downMinuteLabel;\r\n }\r\n\r\n get upSecondButtonLabel(): string {\r\n return this.pickerIntl.upSecondLabel;\r\n }\r\n\r\n get downSecondButtonLabel(): string {\r\n return this.pickerIntl.downSecondLabel;\r\n }\r\n\r\n get hour12ButtonLabel(): string {\r\n return this.isPM\r\n ? this.pickerIntl.hour12PMLabel\r\n : this.pickerIntl.hour12AMLabel;\r\n }\r\n\r\n @Output()\r\n selectedChange = new EventEmitter<T>();\r\n\r\n get owlDTTimerClass(): boolean {\r\n return true;\r\n }\r\n\r\n get owlDTTimeTabIndex(): number {\r\n return -1;\r\n }\r\n\r\n constructor(\r\n private ngZone: NgZone,\r\n private elmRef: ElementRef<HTMLElement>,\r\n private pickerIntl: OwlDateTimeIntl,\r\n private cdRef: ChangeDetectorRef,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>\r\n ) {\r\n this.intlChangesSub = this.pickerIntl.changes.subscribe(() => this.cdRef.markForCheck());\r\n }\r\n\r\n public ngOnInit() {}\r\n\r\n public ngOnDestroy(): void {\r\n this.intlChangesSub.unsubscribe();\r\n }\r\n\r\n /**\r\n * Переводит фокус на элемент компонента\r\n * */\r\n public focus() {\r\n if (this.destroyRef.destroyed) {\r\n return;\r\n }\r\n\r\n this.focusRef?.destroy();\r\n this.focusRef = afterNextRender({\r\n write: () => {\r\n this.focusRef = undefined;\r\n this.elmRef.nativeElement.focus();\r\n }\r\n }, { injector: this.injector });\r\n }\r\n\r\n /**\r\n * Задаёт час при вводе текста в поле времени\r\n * Нужно для обработки часа в 12-часовом формате времени\r\n * */\r\n public setHourValueViaInput(hours: number): void {\r\n if (this.hour12Timer && this.isPM && hours >= 1 && hours <= 11) {\r\n hours = hours + 12;\r\n } else if (this.hour12Timer && !this.isPM && hours === 12) {\r\n hours = 0;\r\n }\r\n\r\n this.setHourValue(hours);\r\n }\r\n\r\n public setHourValue(hours: number): void {\r\n const m = this.dateTimeAdapter.setHours(this.pickerDateTime, hours);\r\n this.selectedChange.emit(m);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n public setMinuteValue(minutes: number): void {\r\n const m = this.dateTimeAdapter.setMinutes(this.pickerDateTime, minutes);\r\n this.selectedChange.emit(m);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n public setSecondValue(seconds: number): void {\r\n const m = this.dateTimeAdapter.setSeconds(this.pickerDateTime, seconds);\r\n this.selectedChange.emit(m);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n public setMeridiem(event: any): void {\r\n this.isPM = !this.isPM;\r\n\r\n let hours = this.hourValue;\r\n if (this.isPM) {\r\n hours = hours + 12;\r\n } else {\r\n hours = hours - 12;\r\n }\r\n\r\n if (hours >= 0 && hours <= 23) {\r\n this.setHourValue(hours);\r\n }\r\n\r\n this.cdRef.markForCheck();\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки увеличения часов\r\n */\r\n public upHourEnabled(): boolean {\r\n return (\r\n this.maxDateTime == null ||\r\n this.compareHours(this.stepHour, this.maxDateTime) < 1\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки уменьшения часов\r\n */\r\n public downHourEnabled(): boolean {\r\n return (\r\n this.minDateTime == null ||\r\n this.compareHours(-this.stepHour, this.minDateTime) > -1\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки увеличения минут\r\n */\r\n public upMinuteEnabled(): boolean {\r\n return (\r\n this.maxDateTime == null ||\r\n this.compareMinutes(this.stepMinute, this.maxDateTime) < 1\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки уменьшения минут\r\n */\r\n public downMinuteEnabled(): boolean {\r\n return (\r\n this.minDateTime == null ||\r\n this.compareMinutes(-this.stepMinute, this.minDateTime) > -1\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки увеличения секунд\r\n */\r\n public upSecondEnabled(): boolean {\r\n return (\r\n this.maxDateTime == null ||\r\n this.compareSeconds(this.stepSecond, this.maxDateTime) < 1\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки уменьшения секунд\r\n */\r\n public downSecondEnabled(): boolean {\r\n return (\r\n this.minDateTime == null ||\r\n this.compareSeconds(-this.stepSecond, this.minDateTime) > -1\r\n );\r\n }\r\n\r\n /**\r\n * Изменяет отображаемый час и сравнивает результат с указанной датой\r\n * 1 — позже comparedDate\r\n * -1 — раньше comparedDate\r\n * 0 — совпадает с comparedDate\r\n * */\r\n private compareHours(amount: number, comparedDate: T): number {\r\n const hours = this.dateTimeAdapter.getHours(this.pickerDateTime) + amount;\r\n const result = this.dateTimeAdapter.setHours(this.pickerDateTime, hours);\r\n return this.dateTimeAdapter.compare(result, comparedDate);\r\n }\r\n\r\n /**\r\n * Изменяет отображаемую минуту и сравнивает результат с указанной датой\r\n * 1 — позже comparedDate\r\n * -1 — раньше comparedDate\r\n * 0 — совпадает с comparedDate\r\n * */\r\n private compareMinutes(amount: number, comparedDate: T): number {\r\n const minutes =\r\n this.dateTimeAdapter.getMinutes(this.pickerDateTime) + amount;\r\n const result = this.dateTimeAdapter.setMinutes(\r\n this.pickerDateTime,\r\n minutes\r\n );\r\n return this.dateTimeAdapter.compare(result, comparedDate);\r\n }\r\n\r\n /**\r\n * Изменяет отображаемую секунду и сравнивает результат с указанной датой\r\n * 1 — позже comparedDate\r\n * -1 — раньше comparedDate\r\n * 0 — совпадает с comparedDate\r\n * */\r\n private compareSeconds(amount: number, comparedDate: T): number {\r\n const seconds =\r\n this.dateTimeAdapter.getSeconds(this.pickerDateTime) + amount;\r\n const result = this.dateTimeAdapter.setSeconds(\r\n this.pickerDateTime,\r\n seconds\r\n );\r\n return this.dateTimeAdapter.compare(result, comparedDate);\r\n }\r\n\r\n /**\r\n * Возвращает корректный объект даты\r\n */\r\n private getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n}\r\n","<owl-date-time-timer-box\r\n [upBtnAriaLabel]=\"upHourButtonLabel\"\r\n [downBtnAriaLabel]=\"downHourButtonLabel\"\r\n [upBtnDisabled]=\"!upHourEnabled()\"\r\n [downBtnDisabled]=\"!downHourEnabled()\"\r\n [boxValue]=\"hourBoxValue\"\r\n [value]=\"hourValue\"\r\n [min]=\"0\"\r\n [max]=\"23\"\r\n [step]=\"stepHour\"\r\n [inputLabel]=\"'Hour'\"\r\n (inputChange)=\"setHourValueViaInput($event)\"\r\n (valueChange)=\"setHourValue($event)\"\r\n></owl-date-time-timer-box>\r\n<owl-date-time-timer-box\r\n [showDivider]=\"true\"\r\n [upBtnAriaLabel]=\"upMinuteButtonLabel\"\r\n [downBtnAriaLabel]=\"downMinuteButtonLabel\"\r\n [upBtnDisabled]=\"!upMinuteEnabled()\"\r\n [downBtnDisabled]=\"!downMinuteEnabled()\"\r\n [value]=\"minuteValue\"\r\n [min]=\"0\"\r\n [max]=\"59\"\r\n [step]=\"stepMinute\"\r\n [inputLabel]=\"'Minute'\"\r\n (inputChange)=\"setMinuteValue($event)\"\r\n (valueChange)=\"setMinuteValue($event)\"\r\n></owl-date-time-timer-box>\r\n@if (showSecondsTimer) {\r\n <owl-date-time-timer-box\r\n [showDivider]=\"true\"\r\n [upBtnAriaLabel]=\"upSecondButtonLabel\"\r\n [downBtnAriaLabel]=\"downSecondButtonLabel\"\r\n [upBtnDisabled]=\"!upSecondEnabled()\"\r\n [downBtnDisabled]=\"!downSecondEnabled()\"\r\n [value]=\"secondValue\"\r\n [min]=\"0\"\r\n [max]=\"59\"\r\n [step]=\"stepSecond\"\r\n [inputLabel]=\"'Second'\"\r\n (inputChange)=\"setSecondValue($event)\"\r\n (valueChange)=\"setSecondValue($event)\"\r\n ></owl-date-time-timer-box>\r\n}\r\n@if (hour12Timer) {\r\n <div class=\"owl-dt-timer-hour12\">\r\n <button\r\n class=\"owl-dt-control-button owl-dt-timer-hour12-box\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"setMeridiem($event)\"\r\n >\r\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\r\n {{ hour12ButtonLabel }}\r\n </span>\r\n </button>\r\n </div>\r\n}\r\n","/**\r\n * date-time-picker-container.component\r\n */\r\n\r\nimport {\r\n AfterContentInit,\r\n AfterViewInit,\r\n AnimationCallbackEvent,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n OnInit,\r\n Optional,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\r\nimport { OwlCalendarComponent } from './calendar.component';\r\nimport { IDateTimePickerAnimationEvent } from './date-time-picker-animation-event';\r\nimport { OwlTimerComponent } from './timer.component';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { OwlDateTime, PickerType } from './date-time.class';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n DOWN_ARROW,\r\n LEFT_ARROW,\r\n RIGHT_ARROW,\r\n SPACE,\r\n UP_ARROW,\r\n} from '@angular/cdk/keycodes';\r\n\r\n@Component({\r\n exportAs: 'owlDateTimeContainer',\r\n selector: 'owl-date-time-container',\r\n templateUrl: './date-time-picker-container.component.html',\r\n styleUrls: ['./date-time-picker-container.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n preserveWhitespaces: false,\r\n standalone: false,\r\n host: {\r\n '(animate.enter)': 'onAnimateEnter($event)',\r\n '(animate.leave)': 'onAnimateLeave($event)',\r\n '[class.owl-dt-container]': 'owlDTContainerClass',\r\n '[class.owl-dt-popup-container]': 'owlDTPopupContainerClass',\r\n '[class.owl-dt-dialog-container]': 'owlDTDialogContainerClass',\r\n '[class.owl-dt-inline-container]': 'owlDTInlineContainerClass',\r\n '[class.owl-dt-container-disabled]': 'owlDTContainerDisabledClass',\r\n '[attr.id]': 'owlDTContainerId',\r\n }\r\n})\r\nexport class OwlDateTimeContainerComponent<T>\r\n implements OnInit, AfterContentInit, AfterViewInit\r\n{\r\n @ViewChild(OwlCalendarComponent)\r\n calendar: OwlCalendarComponent<T>;\r\n @ViewChild(OwlTimerComponent)\r\n timer: OwlTimerComponent<T>;\r\n\r\n public picker: OwlDateTime<T>;\r\n public activeSelectedIndex = 0; // Индекс активной границы диапазона (0: 'from', 1: 'to')\r\n\r\n /** Событие изменения состояния анимации */\r\n public animationStateChanged = new EventEmitter<IDateTimePickerAnimationEvent>();\r\n\r\n // Сохраняем время начала и конца диапазона\r\n private retainStartTime: T;\r\n private retainEndTime: T;\r\n\r\n /**\r\n * Поток запросов на закрытие компонента выбора\r\n * */\r\n private hidePicker$ = new Subject<any>();\r\n\r\n get hidePickerStream(): Observable<any> {\r\n return this.hidePicker$.asObservable();\r\n }\r\n\r\n /**\r\n * Поток запросов на подтверждение выбранного значения\r\n * */\r\n private confirmSelected$ = new Subject<any>();\r\n\r\n get confirmSelectedStream(): Observable<any> {\r\n return this.confirmSelected$.asObservable();\r\n }\r\n\r\n private beforePickerOpened$ = new Subject<any>();\r\n\r\n get beforePickerOpenedStream(): Observable<any> {\r\n return this.beforePickerOpened$.asObservable();\r\n }\r\n\r\n private pickerOpened$ = new Subject<any>();\r\n\r\n get pickerOpenedStream(): Observable<any> {\r\n return this.pickerOpened$.asObservable();\r\n }\r\n\r\n /**\r\n * Текущее значение компонента выбора определяет отображаемый период и дату,\r\n * выделенную при навигации с клавиатуры\r\n */\r\n private _clampedPickerDateTime: T;\r\n\r\n get pickerDateTime() {\r\n return this._clampedPickerDateTime;\r\n }\r\n\r\n set pickerDateTime(value: T) {\r\n if (value != null) {\r\n this._clampedPickerDateTime = this.dateTimeAdapter.clampDate(\r\n value,\r\n this.picker.minDateTime,\r\n this.picker.maxDateTime,\r\n );\r\n }\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n get pickerType(): PickerType {\r\n return this.picker.pickerType;\r\n }\r\n\r\n get cancelLabel(): string {\r\n return this.pickerIntl.cancelBtnLabel;\r\n }\r\n\r\n get setLabel(): string {\r\n return this.pickerIntl.setBtnLabel;\r\n }\r\n\r\n /**\r\n * Подпись начала диапазона ('from')\r\n * */\r\n get fromLabel(): string {\r\n return this.pickerIntl.rangeFromLabel;\r\n }\r\n\r\n /**\r\n * Подпись конца диапазона ('to')\r\n * */\r\n get toLabel(): string {\r\n return this.pickerIntl.rangeToLabel;\r\n }\r\n\r\n /**\r\n * Отформатированное значение начала диапазона ('from')\r\n * */\r\n get fromFormattedValue(): string {\r\n const value = this.picker.selecteds[0];\r\n return value != null\r\n ? this.dateTimeAdapter.format(value, this.picker.formatString)\r\n : '';\r\n }\r\n\r\n /**\r\n * Отформатированное значение конца диапазона ('to')\r\n * */\r\n get toFormattedValue(): string {\r\n const value = this.picker.selecteds[1];\r\n return value != null\r\n ? this.dateTimeAdapter.format(value, this.picker.formatString)\r\n : '';\r\n }\r\n\r\n /**\r\n * Условия отображения кнопок управления:\r\n * 1) Режим компонента — 'dialog'\r\n * 2) Тип компонента отличается от 'calendar', а режим — от 'inline'\r\n * */\r\n get showControlButtons(): boolean {\r\n return (\r\n this.picker.pickerMode === 'dialog' ||\r\n (this.picker.pickerType !== 'calendar' &&\r\n this.picker.pickerMode !== 'inline')\r\n );\r\n }\r\n\r\n get containerElm(): HTMLElement {\r\n return this.elmRef.nativeElement;\r\n }\r\n\r\n get owlDTContainerClass(): boolean {\r\n return true;\r\n }\r\n\r\n get owlDTPopupContainerClass(): boolean {\r\n return this.picker.pickerMode === 'popup';\r\n }\r\n\r\n get owlDTDialogContainerClass(): boolean {\r\n return this.picker.pickerMode === 'dialog';\r\n }\r\n\r\n get owlDTInlineContainerClass(): boolean {\r\n return this.picker.pickerMode === 'inline';\r\n }\r\n\r\n get owlDTContainerDisabledClass(): boolean {\r\n return this.picker.disabled;\r\n }\r\n\r\n get owlDTContainerId(): string {\r\n return this.picker.id;\r\n }\r\n\r\n get owlDTContainerAnimation(): any {\r\n return this.picker.pickerMode === 'inline' ? '' : 'enter';\r\n }\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n private elmRef: ElementRef,\r\n private pickerIntl: OwlDateTimeIntl,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\r\n ) {\r\n this.pickerIntl.changes.pipe(takeUntilDestroyed()).subscribe(() => this.cdRef.markForCheck());\r\n }\r\n\r\n public refreshView(): void {\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n public ngOnInit() {\r\n if (this.picker.selectMode === 'range') {\r\n if (this.picker.selecteds[0] != null) {\r\n this.retainStartTime = this.dateTimeAdapter.clone(\r\n this.picker.selecteds[0],\r\n );\r\n }\r\n if (this.picker.selecteds[1] != null) {\r\n this.retainEndTime = this.dateTimeAdapter.clone(\r\n this.picker.selecteds[1],\r\n );\r\n }\r\n }\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.initPicker();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.focusPicker();\r\n }\r\n\r\n public handleContainerAnimationStart(animationName: 'enter' | 'leave'): void {\r\n if (animationName === 'enter') {\r\n this.beforePickerOpened$.next(null);\r\n }\r\n this.animationStateChanged.emit({\r\n phaseName: 'start',\r\n toState: animationName\r\n });\r\n }\r\n\r\n public handleContainerAnimationDone(animationName: 'enter' | 'leave'): void {\r\n if (animationName === 'enter') {\r\n this.pickerOpened$.next(null);\r\n }\r\n this.animationStateChanged.emit({\r\n phaseName: 'done',\r\n toState: animationName\r\n });\r\n }\r\n\r\n public dateSelected(date: T): void {\r\n if (this.picker.disabled) {\r\n return;\r\n }\r\n let result;\r\n\r\n if (this.picker.isInSingleMode) {\r\n result = this.dateSelectedInSingleMode(date);\r\n if (result != null) {\r\n this.pickerDateTime = result;\r\n this.picker.select(result);\r\n } else {\r\n // Закрываем компонент выбора, если result равен null и pickerType равен 'calendar'\r\n if (this.pickerType === 'calendar') {\r\n this.hidePicker$.next(null);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (this.picker.isInRangeMode) {\r\n result = this.dateSelectedInRangeMode(date);\r\n if (result != null) {\r\n this.pickerDateTime = result[this.activeSelectedIndex];\r\n this.picker.select(result);\r\n }\r\n }\r\n }\r\n\r\n public timeSelected(time: T): void {\r\n if (this.picker.disabled) {\r\n return;\r\n }\r\n this.pickerDateTime = this.dateTimeAdapter.clone(time);\r\n\r\n if (!this.picker.dateTimeChecker(this.pickerDateTime)) {\r\n return;\r\n }\r\n\r\n if (this.picker.isInSingleMode) {\r\n this.picker.select(this.pickerDateTime);\r\n return;\r\n }\r\n\r\n if (this.picker.isInRangeMode) {\r\n const selecteds = [...this.picker.selecteds];\r\n\r\n // Проверяем, находится ли начало диапазона после конца или конец перед началом\r\n // В этом случае задаём обеим границам диапазона одинаковое значение\r\n if (\r\n (this.activeSelectedIndex === 0 &&\r\n selecteds[1] != null &&\r\n this.dateTimeAdapter.compare(\r\n this.pickerDateTime,\r\n selecteds[1],\r\n ) === 1) ||\r\n (this.activeSelectedIndex === 1 &&\r\n selecteds[0] != null &&\r\n this.dateTimeAdapter.compare(\r\n this.pickerDateTime,\r\n selecteds[0],\r\n ) === -1)\r\n ) {\r\n selecteds[0] = this.pickerDateTime;\r\n selecteds[1] = this.pickerDateTime;\r\n } else {\r\n selecteds[this.activeSelectedIndex] = this.pickerDateTime;\r\n }\r\n\r\n if (selecteds[0] != null) {\r\n this.retainStartTime = this.dateTimeAdapter.clone(selecteds[0]);\r\n }\r\n if (selecteds[1] != null) {\r\n this.retainEndTime = this.dateTimeAdapter.clone(selecteds[1]);\r\n }\r\n this.picker.select(selecteds);\r\n }\r\n }\r\n\r\n /**\r\n * Обрабатывает нажатие кнопки отмены\r\n */\r\n public onCancelClicked(event: any): void {\r\n this.hidePicker$.next(null);\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n /**\r\n * Обрабатывает нажатие кнопки подтверждения\r\n */\r\n public onSetClicked(event: any): void {\r\n if (this.picker.disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n if (!this.picker.dateTimeChecker(this.pickerDateTime)) {\r\n this.hidePicker$.next(null);\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n this.confirmSelected$.next(event);\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор границы диапазона в группе переключателей\r\n */\r\n public handleClickOnInfoGroup(event: any, index: number): void {\r\n this.setActiveSelectedIndex(index);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор границы диапазона в группе переключателей\r\n */\r\n public handleKeydownOnInfoGroup(\r\n event: any,\r\n next: any,\r\n index: number,\r\n ): void {\r\n switch (event.keyCode) {\r\n case DOWN_ARROW:\r\n case RIGHT_ARROW:\r\n case UP_ARROW:\r\n case LEFT_ARROW:\r\n next.focus();\r\n this.setActiveSelectedIndex(index === 0 ? 1 : 0);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n\r\n case SPACE:\r\n this.setActiveSelectedIndex(index);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n }\r\n\r\n protected onAnimateEnter(event: AnimationCallbackEvent): void {\r\n this.handleContainerAnimationStart('enter');\r\n const duration = this.parseCssVariableDuration(event.target, '--container-enter-animation-duration');\r\n if (duration === 0) {\r\n this.handleContainerAnimationDone('enter');\r\n event.animationComplete();\r\n } else {\r\n const animation = event.target.animate([\r\n { opacity: 0, transform: 'scaleY(0)' },\r\n { opacity: 1, transform: 'scaleY(1)' }\r\n ], {\r\n duration: duration ?? 400,\r\n easing: 'cubic-bezier(0.25, 0.8, 0.25, 1)',\r\n fill: 'forwards'\r\n });\r\n const complete = () => {\r\n this.handleContainerAnimationDone('enter');\r\n event.animationComplete();\r\n };\r\n animation.finished.then(complete, complete);\r\n }\r\n }\r\n\r\n protected onAnimateLeave(event: AnimationCallbackEvent): void {\r\n this.handleContainerAnimationStart('leave');\r\n const duration = this.parseCssVariableDuration(event.target, '--container-leave-animation-duration');\r\n if (duration === 0) {\r\n this.handleContainerAnimationDone('leave');\r\n event.animationComplete();\r\n } else {\r\n const animation = event.target.animate([\r\n { opacity: 1 },\r\n { opacity: 0 }\r\n ], {\r\n duration: duration ?? 100,\r\n easing: 'linear',\r\n fill: 'forwards'\r\n });\r\n const complete = () => {\r\n this.handleContainerAnimationDone('leave');\r\n event.animationComplete();\r\n };\r\n animation.finished.then(complete, complete);\r\n }\r\n }\r\n\r\n /**\r\n * Задаёт значение activeSelectedIndex\r\n */\r\n private setActiveSelectedIndex(index: number): void {\r\n if (\r\n this.picker.selectMode === 'range' &&\r\n this.activeSelectedIndex !== index\r\n ) {\r\n this.activeSelectedIndex = index;\r\n\r\n const selected = this.picker.selecteds[this.activeSelectedIndex];\r\n if (this.picker.selecteds && selected != null) {\r\n this.pickerDateTime = this.dateTimeAdapter.clone(selected);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n private initPicker(): void {\r\n this.pickerDateTime = this.picker.startAt ?? this.dateTimeAdapter.now();\r\n this.activeSelectedIndex = this.picker.selectMode === 'rangeTo' ? 1 : 0;\r\n }\r\n\r\n /**\r\n * Выбирает дату календаря в режиме single\r\n * Возвращает null, если дата не выбрана\r\n */\r\n private dateSelectedInSingleMode(date: T): T | null {\r\n if (this.dateTimeAdapter.isSameDay(date, this.picker.selected)) {\r\n return null;\r\n }\r\n\r\n return this.updateAndCheckCalendarDate(date);\r\n }\r\n\r\n /**\r\n * Выбирает даты в режиме диапазона\r\n */\r\n private dateSelectedInRangeMode(date: T): T[] | null {\r\n let from = this.picker.selecteds[0];\r\n let to = this.picker.selecteds[1];\r\n\r\n const result = this.updateAndCheckCalendarDate(date);\r\n\r\n if (result == null) {\r\n return null;\r\n }\r\n\r\n // Если указанный день совпадает с началом диапазона или находится после него,\r\n // задаём его как конец диапазона ('to')\r\n // Иначе задаём его как начало диапазона ('from'), а конец ('to') сбрасываем в null\r\n if (this.picker.selectMode === 'range') {\r\n if (\r\n this.picker.selecteds &&\r\n this.picker.selecteds.length &&\r\n to == null &&\r\n from != null &&\r\n this.dateTimeAdapter.differenceInCalendarDays(result, from) >= 0\r\n ) {\r\n if (this.picker.endAt != null && this.retainEndTime == null) {\r\n to = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(result),\r\n this.dateTimeAdapter.getMonth(result),\r\n this.dateTimeAdapter.getDate(result),\r\n this.dateTimeAdapter.getHours(this.picker.endAt),\r\n this.dateTimeAdapter.getMinutes(this.picker.endAt),\r\n this.dateTimeAdapter.getSeconds(this.picker.endAt),\r\n );\r\n } else if (this.retainEndTime != null) {\r\n to = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(result),\r\n this.dateTimeAdapter.getMonth(result),\r\n this.dateTimeAdapter.getDate(result),\r\n this.dateTimeAdapter.getHours(this.retainEndTime),\r\n this.dateTimeAdapter.getMinutes(this.retainEndTime),\r\n this.dateTimeAdapter.getSeconds(this.retainEndTime),\r\n );\r\n } else {\r\n to = result;\r\n }\r\n this.activeSelectedIndex = 1;\r\n } else {\r\n if (this.picker.startAt != null && this.retainStartTime == null) {\r\n from = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(result),\r\n this.dateTimeAdapter.getMonth(result),\r\n this.dateTimeAdapter.getDate(result),\r\n this.dateTimeAdapter.getHours(this.picker.startAt),\r\n this.dateTimeAdapter.getMinutes(this.picker.startAt),\r\n this.dateTimeAdapter.getSeconds(this.picker.startAt),\r\n );\r\n } else if (this.retainStartTime != null) {\r\n from = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(result),\r\n this.dateTimeAdapter.getMonth(result),\r\n this.dateTimeAdapter.getDate(result),\r\n this.dateTimeAdapter.getHours(this.retainStartTime),\r\n this.dateTimeAdapter.getMinutes(this.retainStartTime),\r\n this.dateTimeAdapter.getSeconds(this.retainStartTime),\r\n );\r\n } else {\r\n from = result;\r\n }\r\n to = null;\r\n this.activeSelectedIndex = 0;\r\n }\r\n } else if (this.picker.selectMode === 'rangeFrom') {\r\n from = result;\r\n\r\n // Если начало диапазона находится после конца, сбрасываем конец в null\r\n if (to != null && this.dateTimeAdapter.compare(from, to) > 0) {\r\n to = null;\r\n }\r\n } else if (this.picker.selectMode === 'rangeTo') {\r\n to = result;\r\n\r\n // Если начало диапазона находится после конца, сбрасываем начало в null\r\n if (from != null && this.dateTimeAdapter.compare(from, to) > 0) {\r\n from = null;\r\n }\r\n }\r\n\r\n // Сохранённое время может выходить за min/max, даже если день доступен для выбора\r\n const selected = this.dateTimeAdapter.clampDate(\r\n this.activeSelectedIndex === 0 ? from : to,\r\n this.picker.minDateTime,\r\n this.picker.maxDateTime,\r\n );\r\n if (!this.picker.dateTimeChecker(selected)) {\r\n return null;\r\n }\r\n if (this.activeSelectedIndex === 0) {\r\n from = selected;\r\n } else {\r\n to = selected;\r\n }\r\n return [from, to];\r\n }\r\n\r\n /**\r\n * Обновляет время указанной даты календаря и проверяет её допустимость\r\n * Поскольку время даты календаря по умолчанию равно 00:00:00, в режиме 'both'\r\n * перед выбором даты необходимо обновить её время\r\n * Если дата допустима, возвращает обновлённое значение dateTime\r\n * Если дата недопустима, возвращает null\r\n */\r\n private updateAndCheckCalendarDate(date: T): T {\r\n let result;\r\n\r\n // В режиме 'both' обновляем время даты календаря\r\n if (this.picker.pickerType === 'both') {\r\n result = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(date),\r\n this.dateTimeAdapter.getMonth(date),\r\n this.dateTimeAdapter.getDate(date),\r\n this.dateTimeAdapter.getHours(this.pickerDateTime),\r\n this.dateTimeAdapter.getMinutes(this.pickerDateTime),\r\n this.dateTimeAdapter.getSeconds(this.pickerDateTime),\r\n );\r\n result = this.dateTimeAdapter.clampDate(\r\n result,\r\n this.picker.minDateTime,\r\n this.picker.maxDateTime,\r\n );\r\n } else {\r\n result = this.dateTimeAdapter.clone(date);\r\n }\r\n\r\n // Проверяем обновлённое значение dateTime\r\n return this.picker.dateTimeChecker(result) ? result : null;\r\n }\r\n\r\n /**\r\n * Переводит фокус на компонент выбора\r\n * */\r\n private focusPicker(): void {\r\n if (this.picker.pickerMode === 'inline') {\r\n return;\r\n }\r\n\r\n if (this.calendar) {\r\n this.calendar.focusActiveCell();\r\n } else if (this.timer) {\r\n this.timer.focus();\r\n }\r\n }\r\n\r\n private parseCssVariableDuration(el: Element, cssVariableName: string) {\r\n const durationStr = getComputedStyle(el).getPropertyValue(cssVariableName).trim();\r\n\r\n // Переводим в миллисекунды\r\n let duration: number | undefined = undefined;\r\n if (durationStr.endsWith('ms')) {\r\n duration = parseFloat(durationStr);\r\n } else if (durationStr.endsWith('s')) {\r\n duration = parseFloat(durationStr) * 1000;\r\n } else if (durationStr) {\r\n duration = parseFloat(durationStr);\r\n if (isNaN(duration)) {\r\n duration = undefined;\r\n }\r\n }\r\n return duration;\r\n }\r\n}\r\n","<div\r\n [cdkTrapFocus]=\"picker.pickerMode !== 'inline'\"\r\n class=\"owl-dt-container-inner\"\r\n>\r\n @if (pickerType === 'both' || pickerType === 'calendar') {\r\n <owl-date-time-calendar\r\n class=\"owl-dt-container-row\"\r\n [firstDayOfWeek]=\"picker.firstDayOfWeek\"\r\n [(pickerDateTime)]=\"pickerDateTime\"\r\n [selected]=\"picker.selected\"\r\n [selecteds]=\"picker.selecteds\"\r\n [selectMode]=\"picker.selectMode\"\r\n [minDate]=\"picker.minDateTime\"\r\n [maxDate]=\"picker.maxDateTime\"\r\n [dateFilter]=\"picker.dateTimeFilter\"\r\n [startView]=\"picker.startView\"\r\n [yearOnly]=\"picker.yearOnly\"\r\n [showCalendarWeeks]=\"picker.showCalendarWeeks\"\r\n [multiyearOnly]=\"picker.multiyearOnly\"\r\n [hideOtherMonths]=\"picker.hideOtherMonths\"\r\n (yearSelected)=\"picker.selectYear($event)\"\r\n (monthSelected)=\"picker.selectMonth($event)\"\r\n (dateClicked)=\"picker.selectDate($event)\"\r\n (selectedChange)=\"dateSelected($event)\"\r\n ></owl-date-time-calendar>\r\n }\r\n @if (pickerType === 'both' || pickerType === 'timer') {\r\n <owl-date-time-timer\r\n class=\"owl-dt-container-row\"\r\n [pickerDateTime]=\"pickerDateTime\"\r\n [minDateTime]=\"picker.minDateTime\"\r\n [maxDateTime]=\"picker.maxDateTime\"\r\n [showSecondsTimer]=\"picker.showSecondsTimer\"\r\n [hour12Timer]=\"picker.hour12Timer\"\r\n [stepHour]=\"picker.stepHour\"\r\n [stepMinute]=\"picker.stepMinute\"\r\n [stepSecond]=\"picker.stepSecond\"\r\n (selectedChange)=\"timeSelected($event)\"\r\n ></owl-date-time-timer>\r\n }\r\n @if (picker.isInRangeMode) {\r\n <div\r\n role=\"radiogroup\"\r\n class=\"owl-dt-container-info owl-dt-container-row\"\r\n >\r\n <div\r\n role=\"radio\"\r\n [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\"\r\n [attr.aria-checked]=\"activeSelectedIndex === 0\"\r\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-from\"\r\n [ngClass]=\"{\r\n 'owl-dt-container-info-active': activeSelectedIndex === 0,\r\n }\"\r\n (click)=\"handleClickOnInfoGroup($event, 0)\"\r\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\r\n #from\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-container-range-content\"\r\n tabindex=\"-1\"\r\n >\r\n <span class=\"owl-dt-container-info-label\"\r\n >{{ fromLabel }}:</span\r\n >\r\n <span class=\"owl-dt-container-info-value\">{{\r\n fromFormattedValue\r\n }}</span>\r\n </span>\r\n </div>\r\n <div\r\n role=\"radio\"\r\n [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\"\r\n [attr.aria-checked]=\"activeSelectedIndex === 1\"\r\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-to\"\r\n [ngClass]=\"{\r\n 'owl-dt-container-info-active': activeSelectedIndex === 1,\r\n }\"\r\n (click)=\"handleClickOnInfoGroup($event, 1)\"\r\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\r\n #to\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-container-range-content\"\r\n tabindex=\"-1\"\r\n >\r\n <span class=\"owl-dt-container-info-label\"\r\n >{{ toLabel }}:</span\r\n >\r\n <span class=\"owl-dt-container-info-value\">{{\r\n toFormattedValue\r\n }}</span>\r\n </span>\r\n </div>\r\n </div>\r\n }\r\n @if (showControlButtons) {\r\n <div class=\"owl-dt-container-buttons owl-dt-container-row\">\r\n <button\r\n class=\"owl-dt-control owl-dt-control-button owl-dt-container-control-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onCancelClicked($event)\"\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-control-button-content\"\r\n tabindex=\"-1\"\r\n >\r\n {{ cancelLabel }}\r\n </span>\r\n </button>\r\n <button\r\n class=\"owl-dt-control owl-dt-control-button owl-dt-container-control-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onSetClicked($event)\"\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-control-button-content\"\r\n tabindex=\"-1\"\r\n >\r\n {{ setLabel }}\r\n </span>\r\n </button>\r\n </div>\r\n }\r\n</div>\r\n","/**\r\n * dialog-config.class\r\n */\r\nimport { ViewContainerRef } from '@angular/core';\r\nimport { NoopScrollStrategy, ScrollStrategy } from '@angular/cdk/overlay';\r\n\r\nlet uniqueId = 0;\r\n\r\n/** Возможные переопределения положения диалогового окна */\r\nexport interface DialogPosition {\r\n /** Переопределение отступа диалогового окна сверху */\r\n top?: string;\r\n\r\n /** Переопределение отступа диалогового окна снизу */\r\n bottom?: string;\r\n\r\n /** Переопределение отступа диалогового окна слева */\r\n left?: string;\r\n\r\n /** Переопределение отступа диалогового окна справа */\r\n right?: string;\r\n}\r\n\r\nexport interface OwlDialogConfigInterface {\r\n /**\r\n * ID элемента с описанием диалогового окна\r\n */\r\n ariaDescribedBy?: string | null;\r\n\r\n /**\r\n * Нужно ли переводить фокус на диалоговое окно при открытии\r\n */\r\n autoFocus?: boolean;\r\n\r\n /** Есть ли у диалогового окна фон */\r\n hasBackdrop?: boolean;\r\n\r\n /**\r\n * Пользовательский стиль фона\r\n * */\r\n backdropStyle?: any;\r\n\r\n /** Данные, передаваемые в дочерний компонент через DI */\r\n data?: any ;\r\n\r\n /** Может ли пользователь закрыть диалоговое окно клавишей Escape или нажатием за его пределами */\r\n disableClose?: boolean;\r\n\r\n /**\r\n * ID диалогового окна; если не указан, создаётся уникальный ID\r\n */\r\n id?: string;\r\n\r\n /**\r\n * ARIA-роль элемента диалогового окна\r\n */\r\n role?: 'dialog' | 'alertdialog';\r\n\r\n /**\r\n * Пользовательский класс панели\r\n * */\r\n paneClass?: string | string[];\r\n\r\n /**\r\n * Событие мыши\r\n * */\r\n event?: MouseEvent;\r\n\r\n /**\r\n * Пользовательский класс фона\r\n * */\r\n backdropClass?: string | string[];\r\n\r\n /**\r\n * Нужно ли закрывать диалоговое окно при переходе назад или вперёд в истории браузера\r\n * */\r\n closeOnNavigation?: boolean;\r\n\r\n /** Ширина диалогового окна */\r\n width?: string ;\r\n\r\n /** Высота диалогового окна */\r\n height?: string;\r\n\r\n /**\r\n * Минимальная ширина overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n minWidth?: number | string;\r\n\r\n /**\r\n * Минимальная высота overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n minHeight?: number | string;\r\n\r\n /**\r\n * Максимальная ширина overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n maxWidth?: number | string;\r\n\r\n /**\r\n * Максимальная высота overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n maxHeight?: number | string;\r\n\r\n /** Переопределения положения */\r\n position?: DialogPosition;\r\n\r\n /**\r\n * Стратегия прокрутки при открытом диалоговом окне\r\n * Подробнее: https://material.angular.io/cdk/overlay/overview#scroll-strategies\r\n * */\r\n scrollStrategy?: ScrollStrategy;\r\n\r\n viewContainerRef?: ViewContainerRef;\r\n}\r\n\r\nexport class OwlDialogConfig implements OwlDialogConfigInterface {\r\n /**\r\n * ID элемента с описанием диалогового окна\r\n */\r\n public ariaDescribedBy: string | null = null;\r\n\r\n /**\r\n * Нужно ли переводить фокус на диалоговое окно при открытии\r\n */\r\n public autoFocus = true;\r\n\r\n /** Есть ли у диалогового окна фон */\r\n public hasBackdrop = true;\r\n\r\n /**\r\n * Пользовательский стиль фона\r\n * */\r\n public backdropStyle: any;\r\n\r\n /** Данные, передаваемые в дочерний компонент через DI */\r\n public data: any = null;\r\n\r\n /** Может ли пользователь закрыть диалоговое окно клавишей Escape или нажатием за его пределами */\r\n public disableClose = false;\r\n\r\n /**\r\n * ID диалогового окна; если не указан, создаётся уникальный ID\r\n */\r\n public id: string;\r\n\r\n /**\r\n * ARIA-роль элемента диалогового окна\r\n */\r\n public role: 'dialog' | 'alertdialog' = 'dialog';\r\n\r\n /**\r\n * Пользовательский класс панели\r\n * */\r\n public paneClass: string | string[] = '';\r\n\r\n /**\r\n * Событие мыши\r\n * */\r\n public event: MouseEvent = null;\r\n\r\n /**\r\n * Пользовательский класс фона\r\n * */\r\n public backdropClass: string | string[] = '';\r\n\r\n /**\r\n * Нужно ли закрывать диалоговое окно при переходе назад или вперёд в истории браузера\r\n * */\r\n public closeOnNavigation = true;\r\n\r\n /** Ширина диалогового окна */\r\n public width = '';\r\n\r\n /** Высота диалогового окна */\r\n public height = '';\r\n\r\n /**\r\n * Минимальная ширина overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n public minWidth: number | string;\r\n\r\n /**\r\n * Минимальная высота overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n public minHeight: number | string;\r\n\r\n /**\r\n * Максимальная ширина overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n public maxWidth: number | string = '85vw';\r\n\r\n /**\r\n * Максимальная высота overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n public maxHeight: number | string;\r\n\r\n /** Переопределения положения */\r\n public position: DialogPosition;\r\n\r\n /**\r\n * Стратегия прокрутки при открытом диалоговом окне\r\n * Подробнее: https://material.angular.io/cdk/overlay/overview#scroll-strategies\r\n * */\r\n public scrollStrategy: ScrollStrategy = new NoopScrollStrategy();\r\n\r\n public viewContainerRef: ViewContainerRef;\r\n\r\n constructor() {\r\n this.id = `owl-dialog-${uniqueId++}`;\r\n }\r\n}\r\n","/**\r\n * dialog-ref.class\r\n */\r\nimport { ESCAPE } from '@angular/cdk/keycodes';\r\nimport { GlobalPositionStrategy, OverlayRef } from '@angular/cdk/overlay';\r\nimport { Location } from '@angular/common';\r\nimport { Signal, signal } from '@angular/core';\r\nimport { Observable, Subject, Subscription, SubscriptionLike, filter, take } from 'rxjs';\r\nimport { IDateTimePickerAnimationEvent } from '../date-time/date-time-picker-animation-event';\r\nimport { DialogPosition } from './dialog-config.class';\r\nimport { OwlDialogContainerComponent } from './dialog-container.component';\r\n\r\nexport class OwlDialogRef<T> {\r\n\r\n private result: any;\r\n private closing = false;\r\n\r\n private _beforeClose$ = new Subject<any>();\r\n\r\n private _beforeOpen$ = new Subject<any>();\r\n\r\n private _afterOpen$ = new Subject<any>();\r\n\r\n private _afterClosed$ = new Subject<any>();\r\n\r\n /** Подписка на изменения адреса в браузере */\r\n private locationChanged: SubscriptionLike = Subscription.EMPTY;\r\n\r\n /**\r\n * Экземпляр компонента, открытого в диалоговом окне\r\n * */\r\n public componentInstance = signal<T | undefined>(undefined);\r\n\r\n /** Разрешено ли пользователю закрывать диалоговое окно */\r\n public disableClose = true;\r\n\r\n constructor(private overlayRef: OverlayRef,\r\n private container: OwlDialogContainerComponent,\r\n public readonly id: string,\r\n location?: Location) {\r\n this.disableClose = this.container.config.disableClose;\r\n\r\n this.container.animationStateChanged\r\n .pipe(\r\n filter(( event: IDateTimePickerAnimationEvent ) => event.phaseName === 'start' && event.toState === 'enter'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this._beforeOpen$.next(null);\r\n this._beforeOpen$.complete();\r\n });\r\n\r\n this.container.animationStateChanged\r\n .pipe(\r\n filter(( event: IDateTimePickerAnimationEvent ) => event.phaseName === 'done' && event.toState === 'enter'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this._afterOpen$.next(null);\r\n this._afterOpen$.complete();\r\n });\r\n\r\n this.container.animationStateChanged\r\n .pipe(\r\n filter((event: IDateTimePickerAnimationEvent) => event.phaseName === 'done' && event.toState === 'leave'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this.overlayRef.dispose();\r\n this.locationChanged.unsubscribe();\r\n this._afterClosed$.next(this.result);\r\n this._afterClosed$.complete();\r\n this._beforeOpen$.complete();\r\n this._afterOpen$.complete();\r\n this._beforeClose$.complete();\r\n this.componentInstance.set(undefined);\r\n });\r\n\r\n this.overlayRef.keydownEvents()\r\n .pipe(filter(event => event.keyCode === ESCAPE && !this.disableClose))\r\n .subscribe(() => this.close());\r\n\r\n if (location) {\r\n this.locationChanged = location.subscribe(() => {\r\n if (this.container.config.closeOnNavigation) {\r\n this.close();\r\n }\r\n });\r\n }\r\n }\r\n\r\n public close(dialogResult?: any) {\r\n if (this.closing) {\r\n return;\r\n }\r\n this.closing = true;\r\n this.result = dialogResult;\r\n\r\n this.container.animationStateChanged\r\n .pipe(\r\n filter(event => event.phaseName === 'start' && event.toState === 'leave'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this._beforeClose$.next(dialogResult);\r\n this._beforeClose$.complete();\r\n this.overlayRef.detachBackdrop();\r\n });\r\n\r\n this.container.startExitAnimation();\r\n }\r\n\r\n /**\r\n * Возвращает Observable нажатий на фон overlay\r\n */\r\n public backdropClick(): Observable<any> {\r\n return this.overlayRef.backdropClick();\r\n }\r\n\r\n /**\r\n * Возвращает Observable событий keydown, направленных на overlay\r\n */\r\n public keydownEvents(): Observable<KeyboardEvent> {\r\n return this.overlayRef.keydownEvents();\r\n }\r\n\r\n /**\r\n * Обновляет положение диалогового окна\r\n * @param position Новое положение диалогового окна\r\n */\r\n public updatePosition(position?: DialogPosition): this {\r\n const strategy = this.getPositionStrategy();\r\n\r\n if (position && (position.left || position.right)) {\r\n position.left ? strategy.left(position.left) : strategy.right(position.right);\r\n } else {\r\n strategy.centerHorizontally();\r\n }\r\n\r\n if (position && (position.top || position.bottom)) {\r\n position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\r\n } else {\r\n strategy.centerVertically();\r\n }\r\n\r\n this.overlayRef.updatePosition();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Обновляет ширину и высоту диалогового окна\r\n * @param width Новая ширина диалогового окна\r\n * @param height Новая высота диалогового окна\r\n */\r\n updateSize(width: string = 'auto', height: string = 'auto'): this {\r\n this.getPositionStrategy().width(width).height(height);\r\n this.overlayRef.updatePosition();\r\n return this;\r\n }\r\n\r\n public isAnimating(): Signal<boolean> {\r\n return this.container.isAnimating;\r\n }\r\n\r\n public beforeOpen(): Observable<any> {\r\n return this._beforeOpen$.asObservable();\r\n }\r\n\r\n public afterOpen(): Observable<any> {\r\n return this._afterOpen$.asObservable();\r\n }\r\n\r\n public beforeClose(): Observable<any> {\r\n return this._beforeClose$.asObservable();\r\n }\r\n\r\n public afterClosed(): Observable<any> {\r\n return this._afterClosed$.asObservable();\r\n }\r\n\r\n /** Возвращает стратегию позиционирования из ссылки на overlay */\r\n private getPositionStrategy(): GlobalPositionStrategy {\r\n return this.overlayRef.getConfig().positionStrategy as GlobalPositionStrategy;\r\n }\r\n}\r\n","/**\r\n * dialog-container.component\r\n */\r\n\r\nimport {\r\n Component,\r\n ComponentRef,\r\n ElementRef,\r\n EmbeddedViewRef,\r\n EventEmitter,\r\n Inject,\r\n OnInit,\r\n OnDestroy,\r\n Optional,\r\n signal,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\r\nimport {\r\n BasePortalOutlet,\r\n CdkPortalOutlet,\r\n ComponentPortal,\r\n TemplatePortal,\r\n} from '@angular/cdk/portal';\r\nimport { OwlDateTimeContainerComponent } from '../date-time/date-time-picker-container.component';\r\nimport { IDateTimePickerAnimationEvent } from '../date-time/date-time-picker-animation-event';\r\nimport { OwlDialogConfigInterface } from './dialog-config.class';\r\n\r\n@Component({\r\n selector: 'owl-dialog-container',\r\n templateUrl: './dialog-container.component.html',\r\n standalone: false,\r\n host: {\r\n '[class.owl-dialog-container]': 'owlDialogContainerClass',\r\n '[attr.tabindex]': 'owlDialogContainerTabIndex',\r\n '[attr.id]': 'owlDialogContainerId',\r\n '[attr.role]': 'owlDialogContainerRole',\r\n '[attr.aria-labelledby]': 'owlDialogContainerAriaLabelledby',\r\n '[attr.aria-describedby]': 'owlDialogContainerAriaDescribedby'\r\n }\r\n})\r\nexport class OwlDialogContainerComponent extends BasePortalOutlet\r\n implements OnInit, OnDestroy {\r\n @ViewChild(CdkPortalOutlet, { static: true })\r\n portalOutlet: CdkPortalOutlet | null = null;\r\n\r\n /** Класс, удерживающий фокус внутри диалогового окна и управляющий им */\r\n private focusTrap: FocusTrap;\r\n private contentAnimationSubscription = Subscription.EMPTY;\r\n private exiting = false;\r\n private destroyed = false;\r\n\r\n /** ID элемента, используемого как заголовок диалогового окна */\r\n public ariaLabelledBy: string | null = null;\r\n\r\n /** Событие изменения состояния анимации */\r\n public animationStateChanged = new EventEmitter<IDateTimePickerAnimationEvent>();\r\n\r\n public isAnimating = signal(false);\r\n\r\n private _config: OwlDialogConfigInterface;\r\n private _component: ComponentRef<unknown>;\r\n get config(): OwlDialogConfigInterface {\r\n return this._config;\r\n }\r\n\r\n // Для анимации\r\n private params: any = {\r\n x: '0px',\r\n y: '0px',\r\n ox: '50%',\r\n oy: '50%',\r\n scale: 0\r\n };\r\n\r\n // Сохраняет элемент, находившийся в фокусе до открытия диалогового окна\r\n // Позволяет вернуть фокус на этот элемент после закрытия окна\r\n private elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\r\n\r\n get owlDialogContainerClass(): boolean {\r\n return true;\r\n }\r\n\r\n get owlDialogContainerTabIndex(): number {\r\n return -1;\r\n }\r\n\r\n get owlDialogContainerId(): string {\r\n return this._config.id;\r\n }\r\n\r\n get owlDialogContainerRole(): string {\r\n return this._config.role || null;\r\n }\r\n\r\n get owlDialogContainerAriaLabelledby(): string {\r\n return this.ariaLabelledBy;\r\n }\r\n\r\n get owlDialogContainerAriaDescribedby(): string {\r\n return this._config.ariaDescribedBy || null;\r\n }\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private focusTrapFactory: FocusTrapFactory,\r\n @Optional()\r\n @Inject(DOCUMENT)\r\n private document: any,\r\n ) {\r\n super();\r\n }\r\n\r\n public ngOnInit() {}\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed = true;\r\n this.contentAnimationSubscription.unsubscribe();\r\n this.restoreFocus();\r\n this.animationStateChanged.complete();\r\n }\r\n\r\n /**\r\n * Подключает ComponentPortal как содержимое контейнера диалогового окна\r\n */\r\n public attachComponentPortal<T>(\r\n portal: ComponentPortal<T>,\r\n ): ComponentRef<T> {\r\n if (this.portalOutlet.hasAttached()) {\r\n throw Error(\r\n 'Attempting to attach dialog content after content is already attached',\r\n );\r\n }\r\n\r\n this.savePreviouslyFocusedElement();\r\n const component = this.portalOutlet.attachComponentPortal(portal);\r\n const pickerContainer = component.instance as OwlDateTimeContainerComponent<unknown>;\r\n this.contentAnimationSubscription = pickerContainer.animationStateChanged.subscribe(state => {\r\n if (state.phaseName === 'start') {\r\n this.onAnimationStart(state);\r\n } else {\r\n this.onAnimationDone(state);\r\n }\r\n });\r\n this._component = component;\r\n return component;\r\n }\r\n\r\n public attachTemplatePortal<C>(\r\n portal: TemplatePortal<C>,\r\n ): EmbeddedViewRef<C> {\r\n throw new Error('Method not implemented.');\r\n }\r\n\r\n public setConfig(config: OwlDialogConfigInterface): void {\r\n this._config = config;\r\n\r\n if (config.event) {\r\n this.calculateZoomOrigin(config.event);\r\n }\r\n }\r\n\r\n public onAnimationStart(event: IDateTimePickerAnimationEvent): void {\r\n if (this.exiting && event.toState === 'enter') {\r\n return;\r\n }\r\n this.isAnimating.set(true);\r\n this.animationStateChanged.emit(event);\r\n }\r\n\r\n public onAnimationDone(event: IDateTimePickerAnimationEvent): void {\r\n if (this.exiting && event.toState === 'enter') {\r\n return;\r\n }\r\n if (event.toState === 'enter') {\r\n this.trapFocus();\r\n } else if (event.toState === 'leave') {\r\n this.restoreFocus();\r\n }\r\n\r\n this.animationStateChanged.emit(event);\r\n this.isAnimating.set(false);\r\n }\r\n\r\n public startExitAnimation() {\r\n this.exiting = true;\r\n this._component.destroy();\r\n }\r\n\r\n /**\r\n * Вычисляет точку начала, используемую в `zoomFadeInFrom()`,\r\n * Для анимации\r\n */\r\n private calculateZoomOrigin(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n const clientX = event.clientX;\r\n const clientY = event.clientY;\r\n\r\n const wh = window.innerWidth / 2;\r\n const hh = window.innerHeight / 2;\r\n const x = clientX - wh;\r\n const y = clientY - hh;\r\n const ox = clientX / window.innerWidth;\r\n const oy = clientY / window.innerHeight;\r\n\r\n this.params.x = `${x}px`;\r\n this.params.y = `${y}px`;\r\n this.params.ox = `${ox * 100}%`;\r\n this.params.oy = `${oy * 100}%`;\r\n this.params.scale = 0;\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Сохраняет элемент, находившийся в фокусе до открытия диалогового окна\r\n */\r\n private savePreviouslyFocusedElement(): void {\r\n if (this.document) {\r\n this.elementFocusedBeforeDialogWasOpened = this.document\r\n .activeElement as HTMLElement;\r\n\r\n Promise.resolve().then(() => {\r\n if (!this.destroyed && !this.exiting) {\r\n this.elementRef.nativeElement.focus();\r\n }\r\n });\r\n }\r\n }\r\n\r\n private trapFocus(): void {\r\n if (!this.focusTrap) {\r\n this.focusTrap = this.focusTrapFactory.create(\r\n this.elementRef.nativeElement,\r\n );\r\n }\r\n\r\n if (this._config.autoFocus) {\r\n this.focusTrap.focusInitialElementWhenReady();\r\n }\r\n }\r\n\r\n private restoreFocus(): void {\r\n const toFocus = this.elementFocusedBeforeDialogWasOpened;\r\n\r\n // Дополнительная проверка нужна, поскольку IE иногда задаёт `activeElement` равным null\r\n const activeElement = this.document?.activeElement;\r\n if (toFocus && typeof toFocus.focus === 'function' &&\r\n (!activeElement || activeElement === this.document.body || this.elementRef.nativeElement.contains(activeElement))) {\r\n toFocus.focus();\r\n }\r\n\r\n if (this.focusTrap) {\r\n this.focusTrap.destroy();\r\n this.focusTrap = null;\r\n }\r\n this.elementFocusedBeforeDialogWasOpened = null;\r\n }\r\n}\r\n","<ng-template [cdkPortalOutlet]></ng-template>\r\n","/**\r\n * object.utils\r\n */\r\n\r\n\r\n/**\r\n * Дополняет объект собственными перечисляемыми свойствами одного или нескольких исходных объектов,\r\n * аналогично Object.assign\r\n *\r\n * @param dest Объект, в который копируются свойства\r\n * @param sources Исходные объекты, из которых копируются свойства\r\n */\r\nexport function extendObject(dest: any, ...sources: any[]): any {\r\n if (dest == null) {\r\n throw TypeError('Cannot convert undefined or null to object');\r\n }\r\n\r\n for (const source of sources) {\r\n if (source != null) {\r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n dest[key] = source[key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return dest;\r\n}\r\n","/**\r\n * index\r\n */\r\n\r\nexport * from './object.utils';\r\n","/**\r\n * dialog.service\r\n */\r\n\r\nimport {\r\n ComponentRef,\r\n Inject,\r\n Injectable,\r\n InjectionToken,\r\n Injector,\r\n Optional,\r\n SkipSelf,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { OwlDialogConfig, OwlDialogConfigInterface } from './dialog-config.class';\r\nimport { OwlDialogRef } from './dialog-ref.class';\r\nimport { OwlDialogContainerComponent } from './dialog-container.component';\r\nimport { extendObject } from '../utils';\r\nimport { defer, Observable, Subject } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport {\r\n Overlay,\r\n OverlayConfig,\r\n OverlayContainer,\r\n OverlayRef,\r\n ScrollStrategy\r\n} from '@angular/cdk/overlay';\r\nimport {\r\n ComponentPortal,\r\n ComponentType,\r\n} from '@angular/cdk/portal';\r\n\r\nexport const OWL_DIALOG_DATA = new InjectionToken<any>('OwlDialogData');\r\n\r\n/**\r\n * Токен DI, определяющий обработку прокрутки при открытом диалоговом окне\r\n * */\r\nexport const OWL_DIALOG_SCROLL_STRATEGY = new InjectionToken<\r\n () => ScrollStrategy\r\n>('owl-dialog-scroll-strategy');\r\n\r\nexport function OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(\r\n overlay: Overlay\r\n): () => ScrollStrategy {\r\n const fn = () => overlay.scrollStrategies.block();\r\n return fn;\r\n}\r\n\r\n/** @docs-private */\r\nexport const OWL_DIALOG_SCROLL_STRATEGY_PROVIDER = {\r\n provide: OWL_DIALOG_SCROLL_STRATEGY,\r\n deps: [Overlay],\r\n useFactory: OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY\r\n};\r\n\r\n/**\r\n * Токен DI для задания параметров диалогового окна по умолчанию\r\n * */\r\nexport const OWL_DIALOG_DEFAULT_OPTIONS = new InjectionToken<OwlDialogConfig>(\r\n 'owl-dialog-default-options'\r\n);\r\n\r\n@Injectable()\r\nexport class OwlDialogService {\r\n private readonly _ariaHiddenElements = new Map<Element, string | null>();\r\n\r\n private get ariaHiddenElements(): Map<Element, string | null> {\r\n return this.parentDialog ? this.parentDialog.ariaHiddenElements : this._ariaHiddenElements;\r\n }\r\n\r\n private _openDialogsAtThisLevel: OwlDialogRef<any>[] = [];\r\n private _beforeOpenAtThisLevel = new Subject<OwlDialogRef<any>>();\r\n private _afterOpenAtThisLevel = new Subject<OwlDialogRef<any>>();\r\n private _afterAllClosedAtThisLevel = new Subject<void>();\r\n\r\n /** Хранит текущие открытые диалоговые окна */\r\n get openDialogs(): OwlDialogRef<any>[] {\r\n return this.parentDialog\r\n ? this.parentDialog.openDialogs\r\n : this._openDialogsAtThisLevel;\r\n }\r\n\r\n /** Поток событий открытия диалогового окна */\r\n get beforeOpen(): Subject<OwlDialogRef<any>> {\r\n return this.parentDialog\r\n ? this.parentDialog.beforeOpen\r\n : this._beforeOpenAtThisLevel;\r\n }\r\n\r\n /** Поток событий открытия диалогового окна */\r\n get afterOpen(): Subject<OwlDialogRef<any>> {\r\n return this.parentDialog\r\n ? this.parentDialog.afterOpen\r\n : this._afterOpenAtThisLevel;\r\n }\r\n\r\n get _afterAllClosed(): any {\r\n const parent = this.parentDialog;\r\n return parent\r\n ? parent._afterAllClosed\r\n : this._afterAllClosedAtThisLevel;\r\n }\r\n\r\n /**\r\n * Поток событий завершения закрытия всех диалоговых окон\r\n * Если открытых окон нет, событие отправляется сразу при подписке\r\n */\r\n\r\n afterAllClosed: Observable<{}> = defer(\r\n () =>\r\n this.openDialogs.length\r\n ? this._afterAllClosed\r\n : this._afterAllClosed.pipe(startWith(undefined))\r\n );\r\n\r\n private readonly scrollStrategy: () => ScrollStrategy;\r\n\r\n constructor(\r\n private overlay: Overlay,\r\n private injector: Injector,\r\n @Optional() private location: Location,\r\n @Inject(OWL_DIALOG_SCROLL_STRATEGY) scrollStrategy: any,\r\n @Optional()\r\n @Inject(OWL_DIALOG_DEFAULT_OPTIONS)\r\n private defaultOptions: OwlDialogConfigInterface,\r\n @Optional()\r\n @SkipSelf()\r\n private parentDialog: OwlDialogService,\r\n private overlayContainer: OverlayContainer\r\n ) {\r\n this.scrollStrategy = scrollStrategy;\r\n }\r\n\r\n public open<T>(\r\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\r\n config?: OwlDialogConfigInterface\r\n ): OwlDialogRef<any> {\r\n config = applyConfigDefaults(config, this.defaultOptions);\r\n\r\n if (config.id && this.getDialogById(config.id)) {\r\n throw Error(\r\n `Dialog with id \"${\r\n config.id\r\n }\" exists already. The dialog id must be unique.`\r\n );\r\n }\r\n\r\n const overlayRef = this.createOverlay(config);\r\n const dialogContainer = this.attachDialogContainer(overlayRef, config);\r\n const dialogRef = this.attachDialogContent<T>(\r\n componentOrTemplateRef,\r\n dialogContainer,\r\n overlayRef,\r\n config\r\n );\r\n\r\n if (!this.openDialogs.length) {\r\n this.hideNonDialogContentFromAssistiveTechnology();\r\n }\r\n\r\n this.openDialogs.push(dialogRef);\r\n dialogRef\r\n .afterClosed()\r\n .subscribe(() => this.removeOpenDialog(dialogRef));\r\n this.beforeOpen.next(dialogRef);\r\n this.afterOpen.next(dialogRef);\r\n return dialogRef;\r\n }\r\n\r\n /**\r\n * Закрывает все открытые диалоговые окна\r\n */\r\n public closeAll(): void {\r\n let i = this.openDialogs.length;\r\n\r\n while (i--) {\r\n this.openDialogs[i].close();\r\n }\r\n }\r\n\r\n /**\r\n * Находит открытое диалоговое окно по ID\r\n * @param id ID искомого диалогового окна\r\n */\r\n public getDialogById(id: string): OwlDialogRef<any> | undefined {\r\n return this.openDialogs.find(dialog => dialog.id === id);\r\n }\r\n\r\n private attachDialogContent<T>(\r\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\r\n dialogContainer: OwlDialogContainerComponent,\r\n overlayRef: OverlayRef,\r\n config: OwlDialogConfigInterface\r\n ) {\r\n const dialogRef = new OwlDialogRef<T>(\r\n overlayRef,\r\n dialogContainer,\r\n config.id,\r\n this.location\r\n );\r\n\r\n if (config.hasBackdrop) {\r\n overlayRef.backdropClick().subscribe(() => {\r\n if (!dialogRef.disableClose) {\r\n dialogRef.close();\r\n }\r\n });\r\n }\r\n\r\n if (componentOrTemplateRef instanceof TemplateRef) {\r\n } else {\r\n const injector = this.createInjector<T>(\r\n config,\r\n dialogRef,\r\n dialogContainer\r\n );\r\n const contentRef = dialogContainer.attachComponentPortal(\r\n new ComponentPortal(componentOrTemplateRef, undefined, injector)\r\n );\r\n dialogRef.componentInstance.set(contentRef.instance);\r\n }\r\n\r\n dialogRef\r\n .updateSize(config.width, config.height)\r\n .updatePosition(config.position);\r\n\r\n return dialogRef;\r\n }\r\n\r\n private createInjector<T>(\r\n config: OwlDialogConfigInterface,\r\n dialogRef: OwlDialogRef<T>,\r\n dialogContainer: OwlDialogContainerComponent\r\n ) {\r\n const userInjector =\r\n config?.viewContainerRef?.injector;\r\n const providers = [\r\n { provide: OwlDialogRef, useValue: dialogRef },\r\n { provide: OwlDialogContainerComponent, useValue: dialogContainer },\r\n { provide: OWL_DIALOG_DATA, useValue: config?.data },\r\n ];\r\n\r\n return Injector.create({\r\n providers,\r\n parent: userInjector || this.injector,\r\n });\r\n }\r\n\r\n private createOverlay(config: OwlDialogConfigInterface): OverlayRef {\r\n const overlayConfig = this.getOverlayConfig(config);\r\n return this.overlay.create(overlayConfig);\r\n }\r\n\r\n private attachDialogContainer(\r\n overlayRef: OverlayRef,\r\n config: OwlDialogConfigInterface\r\n ): OwlDialogContainerComponent {\r\n const containerPortal = new ComponentPortal(\r\n OwlDialogContainerComponent,\r\n config.viewContainerRef\r\n );\r\n const containerRef: ComponentRef<\r\n OwlDialogContainerComponent\r\n > = overlayRef.attach(containerPortal);\r\n containerRef.instance.setConfig(config);\r\n\r\n return containerRef.instance;\r\n }\r\n\r\n private getOverlayConfig(dialogConfig: OwlDialogConfigInterface): OverlayConfig {\r\n const state = new OverlayConfig({\r\n positionStrategy: this.overlay.position().global(),\r\n scrollStrategy:\r\n dialogConfig.scrollStrategy || this.scrollStrategy(),\r\n panelClass: dialogConfig.paneClass,\r\n hasBackdrop: dialogConfig.hasBackdrop,\r\n minWidth: dialogConfig.minWidth,\r\n minHeight: dialogConfig.minHeight,\r\n maxWidth: dialogConfig.maxWidth,\r\n maxHeight: dialogConfig.maxHeight\r\n });\r\n\r\n if (dialogConfig.backdropClass) {\r\n state.backdropClass = dialogConfig.backdropClass;\r\n }\r\n\r\n return state;\r\n }\r\n\r\n private removeOpenDialog(dialogRef: OwlDialogRef<any>): void {\r\n const index = this.openDialogs.indexOf(dialogRef);\r\n\r\n if (index > -1) {\r\n this.openDialogs.splice(index, 1);\r\n // Если все диалоговые окна закрыты, удаляем или восстанавливаем `aria-hidden`\r\n // у соседних элементов и отправляем событие в поток `afterAllClosed`\r\n if (!this.openDialogs.length) {\r\n this.ariaHiddenElements.forEach((previousValue, element) => {\r\n if (previousValue) {\r\n element.setAttribute('aria-hidden', previousValue);\r\n } else {\r\n element.removeAttribute('aria-hidden');\r\n }\r\n });\r\n\r\n this.ariaHiddenElements.clear();\r\n this._afterAllClosed.next();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Скрывает от вспомогательных технологий всё содержимое за пределами overlay\r\n */\r\n private hideNonDialogContentFromAssistiveTechnology() {\r\n const overlayContainer = this.overlayContainer.getContainerElement();\r\n\r\n // Проверяем, что контейнер overlay подключён к DOM\r\n if (overlayContainer.parentElement) {\r\n const siblings = overlayContainer.parentElement.children;\r\n\r\n for (let i = siblings.length - 1; i > -1; i--) {\r\n const sibling = siblings[i];\r\n\r\n if (\r\n sibling !== overlayContainer &&\r\n sibling.nodeName !== 'SCRIPT' &&\r\n sibling.nodeName !== 'STYLE' &&\r\n !sibling.hasAttribute('aria-live')\r\n ) {\r\n this.ariaHiddenElements.set(\r\n sibling,\r\n sibling.getAttribute('aria-hidden')\r\n );\r\n sibling.setAttribute('aria-hidden', 'true');\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Применяет параметры по умолчанию к конфигурации диалогового окна\r\n * @param config Изменяемая конфигурация\r\n * @param defaultOptions Параметры конфигурации по умолчанию\r\n * @returns Новый объект конфигурации\r\n */\r\nfunction applyConfigDefaults(\r\n config?: OwlDialogConfigInterface,\r\n defaultOptions?: OwlDialogConfigInterface\r\n): OwlDialogConfig {\r\n return extendObject(new OwlDialogConfig(), defaultOptions, config);\r\n}\r\n","/**\r\n * date-time-picker.component\r\n */\r\n\r\nimport {\r\n afterNextRender,\r\n AfterRenderRef,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentRef,\r\n EventEmitter,\r\n Inject,\r\n InjectionToken,\r\n inject,\r\n Injector,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n untracked,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport {\r\n BlockScrollStrategy,\r\n Overlay,\r\n OverlayConfig,\r\n OverlayRef,\r\n PositionStrategy,\r\n ScrollStrategy\r\n} from '@angular/cdk/overlay';\r\nimport { ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';\r\nimport { coerceArray, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { merge, Subscription } from 'rxjs';\r\nimport { filter, take } from 'rxjs/operators';\r\nimport { OwlDialogRef } from '../dialog/dialog-ref.class';\r\nimport { OwlDialogService } from '../dialog/dialog.service';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { OWL_DATE_TIME_FORMATS, OwlDateTimeFormats } from './adapter/date-time-format.class';\r\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\r\nimport { OwlDateTimeInputDirective } from './date-time-picker-input.directive';\r\nimport { OwlDateTime, PickerMode, PickerType, SelectMode } from './date-time.class';\r\n\r\n/** Токен DI, определяющий обработку прокрутки при открытом компоненте выбора даты и времени */\r\nexport const OWL_DTPICKER_SCROLL_STRATEGY = new InjectionToken<\r\n () => ScrollStrategy\r\n>('owl-dtpicker-scroll-strategy');\r\n\r\n/** @docs-private */\r\nexport function OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY(\r\n overlay: Overlay\r\n): () => BlockScrollStrategy {\r\n const fn = () => overlay.scrollStrategies.block();\r\n return fn;\r\n}\r\n\r\n/** @docs-private */\r\nexport const OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER = {\r\n provide: OWL_DTPICKER_SCROLL_STRATEGY,\r\n deps: [Overlay],\r\n useFactory: OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY\r\n};\r\n\r\n@Component({\r\n selector: 'owl-date-time',\r\n exportAs: 'owlDateTime',\r\n templateUrl: './date-time-picker.component.html',\r\n styleUrls: ['./date-time-picker.component.scss'],\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n preserveWhitespaces: false\r\n})\r\nexport class OwlDateTimeComponent<T> extends OwlDateTime<T>\r\n implements OnInit, OnDestroy {\r\n /** Пользовательский класс фона компонента выбора */\r\n @Input()\r\n public backdropClass: string | string[] = [];\r\n\r\n /** Пользовательский класс overlay-панели компонента выбора */\r\n @Input()\r\n public panelClass: string | string[] = [];\r\n\r\n /** Дата, на которой календарь открывается изначально */\r\n private _startAt: T | null;\r\n @Input()\r\n get startAt(): T | null {\r\n // Если startAt задан явно, открываем календарь на этой дате\r\n // Иначе используем текущее выбранное значение\r\n if (this._startAt != null) {\r\n return this._startAt;\r\n }\r\n\r\n if (this._dtInput) {\r\n if (this._dtInput.selectMode === 'single') {\r\n return this._dtInput.value ?? null;\r\n } else if (\r\n this._dtInput.selectMode === 'range' ||\r\n this._dtInput.selectMode === 'rangeFrom'\r\n ) {\r\n return this._dtInput.values[0] ?? null;\r\n } else if (this._dtInput.selectMode === 'rangeTo') {\r\n return this._dtInput.values[1] ?? null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n set startAt(date: T | null) {\r\n this._startAt = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(date)\r\n );\r\n }\r\n\r\n /** Конечная дата календаря в режиме диапазона */\r\n private _endAt: T | null;\r\n @Input()\r\n get endAt(): T | null {\r\n if (this._endAt != null) {\r\n return this._endAt;\r\n }\r\n\r\n if (this._dtInput) {\r\n if (this._dtInput.selectMode === 'single') {\r\n return this._dtInput.value ?? null;\r\n } else if (\r\n this._dtInput.selectMode === 'range' ||\r\n this._dtInput.selectMode === 'rangeFrom'\r\n ) {\r\n return this._dtInput.values[1] ?? null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n set endAt(date: T | null) {\r\n this._endAt = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(date)\r\n );\r\n }\r\n\r\n /**\r\n * Задаёт тип компонента выбора даты и времени:\r\n * 'both' — календарь и выбор времени\r\n * 'calendar' — только календарь\r\n * 'timer' — только выбор времени\r\n */\r\n private _pickerType: PickerType = 'both';\r\n @Input()\r\n get pickerType(): PickerType {\r\n return this._pickerType;\r\n }\r\n\r\n set pickerType(val: PickerType) {\r\n if (val !== this._pickerType) {\r\n this._pickerType = val;\r\n if (this._dtInput) {\r\n this._dtInput.formatNativeInputValue();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Открывается ли компонент выбора в диалоговом окне\r\n */\r\n _pickerMode: PickerMode = 'popup';\r\n @Input()\r\n get pickerMode() {\r\n return this._pickerMode;\r\n }\r\n\r\n set pickerMode(mode: PickerMode) {\r\n if (mode === 'popup') {\r\n this._pickerMode = mode;\r\n } else {\r\n this._pickerMode = 'dialog';\r\n }\r\n }\r\n\r\n /** Отключён ли компонент выбора даты и времени */\r\n private _disabled: boolean;\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled === undefined && this._dtInput\r\n ? this._dtInput.disabled\r\n : !!this._disabled;\r\n }\r\n\r\n set disabled(value: boolean) {\r\n value = coerceBooleanProperty(value);\r\n if (value !== this._disabled) {\r\n this._disabled = value;\r\n this.disabledChange.next(value);\r\n this.refreshView();\r\n }\r\n }\r\n\r\n /** Открыт ли календарь */\r\n private _opened = false;\r\n private closing = false;\r\n private destroyed = false;\r\n private positionRenderRef: AfterRenderRef | undefined;\r\n private readonly injector = inject(Injector);\r\n @Input()\r\n get opened(): boolean {\r\n return this._opened;\r\n }\r\n\r\n set opened(val: boolean) {\r\n val ? this.open() : this.close();\r\n }\r\n\r\n /**\r\n * Стратегия прокрутки при открытом компоненте выбора\r\n * Подробнее: https://material.angular.io/cdk/overlay/overview#scroll-strategies\r\n * */\r\n @Input()\r\n public scrollStrategy: ScrollStrategy;\r\n\r\n /**\r\n * Обработчик закрытия компонента выбора\r\n * */\r\n @Output()\r\n afterPickerClosed = new EventEmitter<any>();\r\n\r\n /**\r\n * Обработчик перед открытием компонента выбора\r\n * */\r\n @Output()\r\n beforePickerOpen = new EventEmitter<any>();\r\n\r\n /**\r\n * Обработчик открытия компонента выбора\r\n * */\r\n @Output()\r\n afterPickerOpen = new EventEmitter<any>();\r\n\r\n /**\r\n * Передаёт выбранный год в представлении нескольких лет\r\n * При этом выбранная дата не изменяется\r\n * */\r\n @Output()\r\n yearSelected = new EventEmitter<T>();\r\n\r\n /**\r\n * Передаёт выбранный месяц в представлении года\r\n * При этом выбранная дата не изменяется\r\n * */\r\n @Output()\r\n monthSelected = new EventEmitter<T>();\r\n\r\n /**\r\n * Передаёт выбранную дату\r\n * */\r\n @Output()\r\n dateSelected = new EventEmitter<T>();\r\n\r\n /**\r\n * Событие подтверждения выбранного значения\r\n * */\r\n public confirmSelectedChange = new EventEmitter<T[] | T>();\r\n\r\n /**\r\n * Событие отключения компонента выбора даты и времени\r\n * */\r\n public disabledChange = new EventEmitter<boolean>();\r\n\r\n private pickerContainerPortal: ComponentPortal<\r\n OwlDateTimeContainerComponent<T>\r\n >;\r\n private pickerContainer: OwlDateTimeContainerComponent<T>;\r\n private popupRef: OverlayRef;\r\n private dialogRef: OwlDialogRef<OwlDateTimeContainerComponent<T>>;\r\n private dialogClosedStreamSub = Subscription.EMPTY;\r\n private dtInputSub = Subscription.EMPTY;\r\n private hidePickerStreamSub = Subscription.EMPTY;\r\n private confirmSelectedStreamSub = Subscription.EMPTY;\r\n private pickerOpenedStreamSub = Subscription.EMPTY;\r\n private pickerBeforeOpenedStreamSub = Subscription.EMPTY;\r\n\r\n /** Элемент, находившийся в фокусе до открытия компонента выбора даты и времени */\r\n private focusedElementBeforeOpen: HTMLElement | null = null;\r\n\r\n private _dtInput: OwlDateTimeInputDirective<T>;\r\n get dtInput() {\r\n return this._dtInput;\r\n }\r\n\r\n private _selected: T | null;\r\n get selected() {\r\n return this._selected;\r\n }\r\n\r\n set selected(value: T | null) {\r\n this._selected = value;\r\n this.refreshView();\r\n }\r\n\r\n private _selecteds: T[] = [];\r\n get selecteds() {\r\n return this._selecteds;\r\n }\r\n\r\n set selecteds(values: T[]) {\r\n this._selecteds = values;\r\n this.refreshView();\r\n }\r\n\r\n /** Минимальная доступная для выбора дата */\r\n get minDateTime(): T | null {\r\n return this._dtInput && this._dtInput.min;\r\n }\r\n\r\n /** Максимальная доступная для выбора дата */\r\n get maxDateTime(): T | null {\r\n return this._dtInput && this._dtInput.max;\r\n }\r\n\r\n get dateTimeFilter(): (date: T | null) => boolean {\r\n return this._dtInput && this._dtInput.dateTimeFilter;\r\n }\r\n\r\n get selectMode(): SelectMode {\r\n return this._dtInput.selectMode;\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this._dtInput.isInSingleMode;\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return this._dtInput.isInRangeMode;\r\n }\r\n\r\n private readonly defaultScrollStrategy: () => ScrollStrategy;\r\n\r\n constructor(\r\n public overlay: Overlay,\r\n private viewContainerRef: ViewContainerRef,\r\n private dialogService: OwlDialogService,\r\n private ngZone: NgZone,\r\n protected changeDetector: ChangeDetectorRef,\r\n @Optional() protected dateTimeAdapter: DateTimeAdapter<T>,\r\n @Inject(OWL_DTPICKER_SCROLL_STRATEGY) defaultScrollStrategy: any,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n protected dateTimeFormats: OwlDateTimeFormats,\r\n @Optional()\r\n @Inject(DOCUMENT)\r\n private document: any\r\n ) {\r\n super(dateTimeAdapter, dateTimeFormats);\r\n this.defaultScrollStrategy = defaultScrollStrategy;\r\n }\r\n\r\n public refreshView(): void {\r\n this.changeDetector.markForCheck();\r\n this.pickerContainer?.refreshView();\r\n }\r\n\r\n public ngOnInit() {}\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed = true;\r\n this.close();\r\n this.dtInputSub.unsubscribe();\r\n this.disabledChange.complete();\r\n\r\n if (this.popupRef) {\r\n this.popupRef.dispose();\r\n }\r\n }\r\n\r\n public registerInput(input: OwlDateTimeInputDirective<T>): void {\r\n if (this._dtInput) {\r\n throw Error(\r\n 'A Owl DateTimePicker can only be associated with a single input.'\r\n );\r\n }\r\n\r\n this._dtInput = input;\r\n this.dtInputSub = this._dtInput.valueChange.subscribe(\r\n (value: T[] | T | null) => {\r\n if (Array.isArray(value)) {\r\n this.selecteds = value;\r\n } else {\r\n this.selected = value;\r\n }\r\n }\r\n );\r\n }\r\n\r\n public open(): void {\r\n if (this._opened || this.closing || this.destroyed || this.disabled) {\r\n return;\r\n }\r\n\r\n if (!this._dtInput) {\r\n throw Error(\r\n 'Attempted to open an DateTimePicker with no associated input.'\r\n );\r\n }\r\n\r\n if (this.document) {\r\n this.focusedElementBeforeOpen = this.document.activeElement;\r\n }\r\n\r\n // Сбрасываем выбранное значение компонента\r\n if (this.isInSingleMode) {\r\n this.selected = this._dtInput.value;\r\n } else if (this.isInRangeMode) {\r\n this.selecteds = this._dtInput.values;\r\n }\r\n\r\n // При открытии компонента выбора приводим текущее выбранное время\r\n // к времени из _startAt\r\n if (this.selected != null && this.pickerType !== 'calendar' && this._startAt != null) {\r\n this.selected = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.selected),\r\n this.dateTimeAdapter.getMonth(this.selected),\r\n this.dateTimeAdapter.getDate(this.selected),\r\n this.dateTimeAdapter.getHours(this._startAt),\r\n this.dateTimeAdapter.getMinutes(this._startAt),\r\n this.dateTimeAdapter.getSeconds(this._startAt)\r\n );\r\n }\r\n\r\n this._opened = true;\r\n this.changeDetector.markForCheck();\r\n this.pickerMode === 'dialog' ? this.openAsDialog() : this.openAsPopup();\r\n\r\n this.pickerContainer.picker = this;\r\n\r\n // Подписываемся на hidePickerStream контейнера компонента выбора\r\n this.hidePickerStreamSub = this.pickerContainer.hidePickerStream.subscribe(\r\n () => {\r\n this.close();\r\n }\r\n );\r\n\r\n // Подписываемся на confirmSelectedStream контейнера компонента выбора\r\n this.confirmSelectedStreamSub = this.pickerContainer.confirmSelectedStream.subscribe(\r\n (event: any) => {\r\n this.confirmSelect(event);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Выбирает указанную дату\r\n */\r\n public select(date: T[] | T): void {\r\n if (Array.isArray(date)) {\r\n this.selecteds = [...date];\r\n } else {\r\n this.selected = date;\r\n }\r\n\r\n /**\r\n * Условия автоматического подтверждения выбранной даты или диапазона:\r\n * 1) Режим компонента отличается от 'dialog'\r\n * 2) Тип компонента — 'calendar', а selectMode — 'single'\r\n * 3) Тип компонента — 'calendar', selectMode — 'range',\r\n * а в selecteds заданы начало (selecteds[0]) и конец (selecteds[1]) диапазона\r\n * 4) selectMode — 'rangeFrom', а selecteds[0] содержит значение\r\n * 5) selectMode — 'rangeTo', а selecteds[1] содержит значение\r\n * */\r\n if (\r\n this.pickerMode !== 'dialog' &&\r\n this.pickerType === 'calendar' &&\r\n ((this.selectMode === 'single' && this.selected != null) ||\r\n (this.selectMode === 'rangeFrom' && this.selecteds[0] != null) ||\r\n (this.selectMode === 'rangeTo' && this.selecteds[1] != null) ||\r\n (this.selectMode === 'range' &&\r\n this.selecteds[0] != null &&\r\n this.selecteds[1] != null))\r\n ) {\r\n this.confirmSelect();\r\n }\r\n }\r\n\r\n /**\r\n * Передаёт выбранный год в представлении нескольких лет\r\n * */\r\n public selectYear(normalizedYear: T): void {\r\n this.yearSelected.emit(normalizedYear);\r\n }\r\n\r\n /**\r\n * Передаёт выбранный месяц в представлении года\r\n * */\r\n public selectMonth(normalizedMonth: T): void {\r\n this.monthSelected.emit(normalizedMonth);\r\n }\r\n\r\n /**\r\n * Передаёт выбранную дату\r\n * */\r\n public selectDate(normalizedDate: T): void {\r\n this.dateSelected.emit(normalizedDate);\r\n }\r\n\r\n /**\r\n * Закрывает компонент выбора\r\n */\r\n public close(): void {\r\n if (!this._opened || this.closing) {\r\n return;\r\n }\r\n\r\n this.closing = true;\r\n this._opened = false;\r\n this.positionRenderRef?.destroy();\r\n this.positionRenderRef = undefined;\r\n this.hidePickerStreamSub?.unsubscribe();\r\n this.confirmSelectedStreamSub?.unsubscribe();\r\n this.pickerBeforeOpenedStreamSub?.unsubscribe();\r\n this.pickerOpenedStreamSub?.unsubscribe();\r\n this.dialogClosedStreamSub.unsubscribe();\r\n\r\n const dialogRef = this.dialogRef;\r\n this.dialogRef = null;\r\n dialogRef?.close();\r\n\r\n if (this.popupRef?.hasAttached()) {\r\n this.popupRef.detach();\r\n }\r\n if (this.pickerContainerPortal?.isAttached) {\r\n this.pickerContainerPortal.detach();\r\n }\r\n\r\n this.pickerContainer = null;\r\n\r\n // Игнорируем обработчики фокуса, пытающиеся повторно открыть компонент при восстановлении фокуса\r\n this.focusedElementBeforeOpen?.focus();\r\n this.focusedElementBeforeOpen = null;\r\n this.changeDetector.markForCheck();\r\n this.closing = false;\r\n this.afterPickerClosed.emit(this.isInSingleMode ? this.selected : this.selecteds);\r\n }\r\n\r\n /**\r\n * Подтверждает выбранное значение\r\n */\r\n public confirmSelect(event?: any): void {\r\n if (this.isInSingleMode) {\r\n const selected =\r\n this.selected ?? this.startAt ?? this.dateTimeAdapter.now();\r\n this.confirmSelectedChange.emit(selected);\r\n } else if (this.isInRangeMode) {\r\n this.confirmSelectedChange.emit(this.selecteds);\r\n }\r\n\r\n this.close();\r\n return;\r\n }\r\n\r\n /**\r\n * Открывает компонент выбора в диалоговом окне\r\n */\r\n private openAsDialog(): void {\r\n this.dialogRef = this.dialogService.open(\r\n OwlDateTimeContainerComponent,\r\n {\r\n autoFocus: false,\r\n backdropClass: [\r\n 'cdk-overlay-dark-backdrop',\r\n ...coerceArray(this.backdropClass)\r\n ],\r\n paneClass: ['owl-dt-dialog', ...coerceArray(this.panelClass)],\r\n viewContainerRef: this.viewContainerRef,\r\n scrollStrategy:\r\n this.scrollStrategy || this.defaultScrollStrategy()\r\n }\r\n );\r\n this.pickerContainer = untracked(this.dialogRef.componentInstance);\r\n\r\n this.pickerBeforeOpenedStreamSub = this.dialogRef.beforeOpen().subscribe(() => {\r\n this.beforePickerOpen.emit(null);\r\n });\r\n this.pickerOpenedStreamSub = this.dialogRef.afterOpen().subscribe(() => {\r\n this.afterPickerOpen.emit(null);\r\n });\r\n this.dialogClosedStreamSub = this.dialogRef.afterClosed().subscribe(() => this.close());\r\n }\r\n\r\n /**\r\n * Открывает компонент выбора во всплывающем окне\r\n */\r\n private openAsPopup(): void {\r\n if (!this.pickerContainerPortal) {\r\n this.pickerContainerPortal = new ComponentPortal<\r\n OwlDateTimeContainerComponent<T>\r\n >(OwlDateTimeContainerComponent, this.viewContainerRef);\r\n }\r\n\r\n if (!this.popupRef) {\r\n this.createPopup();\r\n }\r\n\r\n if (!this.popupRef.hasAttached()) {\r\n const componentRef: ComponentRef<\r\n OwlDateTimeContainerComponent<T>\r\n > = this.popupRef.attach(this.pickerContainerPortal);\r\n this.pickerContainer = componentRef.instance;\r\n\r\n // Обновляем положение после отрисовки календаря\r\n this.positionRenderRef?.destroy();\r\n this.positionRenderRef = afterNextRender({\r\n mixedReadWrite: () => {\r\n this.positionRenderRef = undefined;\r\n if (this.popupRef.hasAttached()) {\r\n this.popupRef.updatePosition();\r\n }\r\n }\r\n }, { injector: this.injector });\r\n\r\n this.pickerBeforeOpenedStreamSub = this.pickerContainer.beforePickerOpenedStream\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.beforePickerOpen.emit(null);\r\n });\r\n\r\n // Отправляем событие открытия\r\n this.pickerOpenedStreamSub = this.pickerContainer.pickerOpenedStream\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.afterPickerOpen.emit(null);\r\n });\r\n }\r\n }\r\n\r\n private createPopup(): void {\r\n const overlayConfig = new OverlayConfig({\r\n positionStrategy: this.createPopupPositionStrategy(),\r\n hasBackdrop: true,\r\n backdropClass: [\r\n 'cdk-overlay-transparent-backdrop',\r\n ...coerceArray(this.backdropClass)\r\n ],\r\n scrollStrategy: this.scrollStrategy || this.defaultScrollStrategy(),\r\n panelClass: ['owl-dt-popup', ...coerceArray(this.panelClass)]\r\n });\r\n\r\n this.popupRef = this.overlay.create(overlayConfig);\r\n\r\n merge(\r\n this.popupRef.backdropClick(),\r\n this.popupRef.detachments(),\r\n this.popupRef\r\n .keydownEvents()\r\n .pipe(\r\n filter(\r\n event =>\r\n event.keyCode === ESCAPE ||\r\n (this._dtInput &&\r\n event.altKey &&\r\n event.keyCode === UP_ARROW)\r\n )\r\n )\r\n ).subscribe(() => this.close());\r\n }\r\n\r\n /**\r\n * Создаёт PositionStrategy всплывающего окна\r\n * */\r\n private createPopupPositionStrategy(): PositionStrategy {\r\n return this.overlay\r\n .position()\r\n .flexibleConnectedTo(this._dtInput.elementRef)\r\n .withTransformOriginOn('.owl-dt-container')\r\n .withFlexibleDimensions(false)\r\n .withPush(false)\r\n .withPositions([\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top'\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom'\r\n },\r\n {\r\n originX: 'end',\r\n originY: 'bottom',\r\n overlayX: 'end',\r\n overlayY: 'top'\r\n },\r\n {\r\n originX: 'end',\r\n originY: 'top',\r\n overlayX: 'end',\r\n overlayY: 'bottom'\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: -176\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: -352\r\n }\r\n ]);\r\n }\r\n}\r\n","","/**\r\n * date-time-picker-input.directive\r\n */\r\n\r\nimport {\r\n AfterContentInit,\r\n ChangeDetectorRef,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n Renderer2\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n Validators\r\n} from '@angular/forms';\r\nimport { DOWN_ARROW } from '@angular/cdk/keycodes';\r\nimport { OwlDateTimeComponent } from './date-time-picker.component';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport {\r\n OWL_DATE_TIME_FORMATS,\r\n OwlDateTimeFormats\r\n} from './adapter/date-time-format.class';\r\nimport { Subscription } from 'rxjs';\r\nimport { SelectMode } from './date-time.class';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\n\r\nexport const OWL_DATETIME_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => OwlDateTimeInputDirective),\r\n multi: true\r\n};\r\n\r\nexport const OWL_DATETIME_VALIDATORS: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => OwlDateTimeInputDirective),\r\n multi: true\r\n};\r\n\r\n@Directive({\r\n selector: 'input[owlDateTime]',\r\n exportAs: 'owlDateTimeInput',\r\n standalone: false,\r\n host: {\r\n '(keydown)': 'handleKeydownOnHost($event)',\r\n '(blur)': 'handleBlurOnHost($event)',\r\n '(input)': 'handleInputOnHost($event)',\r\n '(change)': 'handleChangeOnHost($event)',\r\n '[attr.aria-haspopup]': 'owlDateTimeInputAriaHaspopup',\r\n '[attr.aria-owns]': 'owlDateTimeInputAriaOwns',\r\n '[attr.min]': 'minIso8601',\r\n '[attr.max]': 'maxIso8601',\r\n '[disabled]': 'owlDateTimeInputDisabled'\r\n },\r\n providers: [\r\n OWL_DATETIME_VALUE_ACCESSOR,\r\n OWL_DATETIME_VALIDATORS,\r\n ],\r\n})\r\nexport class OwlDateTimeInputDirective<T>\r\n implements\r\n OnInit,\r\n AfterContentInit,\r\n OnDestroy,\r\n ControlValueAccessor,\r\n Validator {\r\n static ngAcceptInputType_disabled: boolean|'';\r\n\r\n /**\r\n * Признак обязательного значения для диапазона [null, null]\r\n * */\r\n private _required: boolean;\r\n @Input()\r\n get required() {\r\n return this._required;\r\n }\r\n\r\n set required(value: any) {\r\n this._required = coerceBooleanProperty(value);\r\n this.validatorOnChange();\r\n }\r\n\r\n /**\r\n * Компонент выбора даты и времени, связанный с этим полем\r\n * */\r\n @Input()\r\n set owlDateTime(value: OwlDateTimeComponent<T>) {\r\n this.registerDateTimePicker(value);\r\n }\r\n\r\n /**\r\n * Функция фильтрации даты и времени\r\n */\r\n @Input()\r\n set owlDateTimeFilter(filter: (date: T | null) => boolean) {\r\n this._dateTimeFilter = filter;\r\n this.validatorOnChange();\r\n this.dtPicker?.refreshView();\r\n }\r\n\r\n private _dateTimeFilter: (date: T | null) => boolean;\r\n get dateTimeFilter() {\r\n return this._dateTimeFilter;\r\n }\r\n\r\n /** Отключено ли поле ввода даты и времени */\r\n private _disabled: boolean;\r\n @Input()\r\n get disabled() {\r\n return !!this._disabled;\r\n }\r\n\r\n set disabled(value: boolean) {\r\n const newValue = coerceBooleanProperty(value);\r\n const element = this.elmRef.nativeElement;\r\n\r\n if (this._disabled !== newValue) {\r\n this._disabled = newValue;\r\n this.disabledChange.emit(newValue);\r\n this.changeDetector.markForCheck();\r\n this.dtPicker?.refreshView();\r\n }\r\n\r\n // Проверяем наличие метода `blur`, поскольку при SSR он отсутствует\r\n if (newValue && element.blur) {\r\n // Обычно нативное поле ввода автоматически теряет фокус при отключении, что\r\n // запускает дополнительный цикл change detection и может вызвать ошибку\r\n // changed after checked, если поле ввода до этого находилось в фокусе\r\n element.blur();\r\n }\r\n }\r\n\r\n /** Минимальная допустимая дата */\r\n private _min: T | null;\r\n @Input()\r\n get min(): T | null {\r\n return this._min;\r\n }\r\n\r\n set min(value: T | null) {\r\n this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));\r\n this.validatorOnChange();\r\n this.dtPicker?.refreshView();\r\n }\r\n\r\n /** Максимальная допустимая дата */\r\n private _max: T | null;\r\n @Input()\r\n get max(): T | null {\r\n return this._max;\r\n }\r\n\r\n set max(value: T | null) {\r\n this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));\r\n this.validatorOnChange();\r\n this.dtPicker?.refreshView();\r\n }\r\n\r\n /**\r\n * Режим выбора даты\r\n */\r\n private _selectMode: SelectMode = 'single';\r\n @Input()\r\n get selectMode() {\r\n return this._selectMode;\r\n }\r\n\r\n set selectMode(mode: SelectMode) {\r\n if (\r\n mode !== 'single' &&\r\n mode !== 'range' &&\r\n mode !== 'rangeFrom' &&\r\n mode !== 'rangeTo'\r\n ) {\r\n throw Error('OwlDateTime Error: invalid selectMode value!');\r\n }\r\n\r\n this._selectMode = mode;\r\n this.validatorOnChange();\r\n this.dtPicker?.refreshView();\r\n }\r\n\r\n /**\r\n * Символ, разделяющий начало ('from') и конец ('to') диапазона в поле ввода\r\n */\r\n @Input()\r\n rangeSeparator = '-';\r\n\r\n private _value: T | null;\r\n @Input()\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n set value(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this.lastValueValid = value == null || this.dateTimeAdapter.isValid(value);\r\n value = this.getValidDate(value);\r\n const oldDate = this._value;\r\n this._value = value;\r\n\r\n // Задаём свойство 'value' поля ввода\r\n this.formatNativeInputValue();\r\n\r\n // Проверяем, изменилось ли значение поля ввода\r\n if (!this.dateTimeAdapter.isEqual(oldDate, value)) {\r\n this.valueChange.emit(value);\r\n }\r\n }\r\n\r\n private _values: T[] = [];\r\n @Input()\r\n get values() {\r\n return this._values;\r\n }\r\n\r\n set values(values: T[]) {\r\n if (values && values.length > 0) {\r\n const deserialized = values.map(v => this.dateTimeAdapter.deserialize(v));\r\n this.lastValueValid = deserialized.every(v => v == null || this.dateTimeAdapter.isValid(v));\r\n this._values = deserialized.map(v => this.getValidDate(v));\r\n } else {\r\n this._values = [];\r\n this.lastValueValid = true;\r\n }\r\n\r\n // Задаём свойство 'value' поля ввода\r\n this.formatNativeInputValue();\r\n\r\n this.valueChange.emit(this._values);\r\n }\r\n\r\n /**\r\n * Обработчик события `change` этого `<input>`\r\n * */\r\n @Output()\r\n dateTimeChange = new EventEmitter<any>();\r\n\r\n /**\r\n * Обработчик события `input` этого `<input>`\r\n * */\r\n @Output()\r\n dateTimeInput = new EventEmitter<any>();\r\n\r\n get elementRef(): ElementRef {\r\n return this.elmRef;\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this._selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this._selectMode === 'range' ||\r\n this._selectMode === 'rangeFrom' ||\r\n this._selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n /** Компонент выбора даты и времени, связанный с этим полем */\r\n public dtPicker: OwlDateTimeComponent<T>;\r\n\r\n private dtPickerSub: Subscription = Subscription.EMPTY;\r\n private localeSub: Subscription = Subscription.EMPTY;\r\n\r\n private lastValueValid = true;\r\n\r\n private onModelChange: Function = () => {};\r\n private onModelTouched: Function = () => {};\r\n private validatorOnChange: Function = () => {};\r\n\r\n /** Валидатор корректности разбора введённого значения */\r\n private parseValidator: ValidatorFn = (): ValidationErrors | null => {\r\n return this.lastValueValid\r\n ? null\r\n : { owlDateTimeParse: { text: this.elmRef.nativeElement.value } };\r\n }\r\n\r\n /** Валидатор минимальной даты */\r\n private minValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n if (this.isInSingleMode) {\r\n const controlValue = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value)\r\n );\r\n return this.min == null ||\r\n controlValue == null ||\r\n this.dateTimeAdapter.compare(this.min, controlValue) <= 0\r\n ? null\r\n : { owlDateTimeMin: { min: this.min, actual: controlValue } };\r\n } else if (this.isInRangeMode && control.value) {\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n );\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n );\r\n return this.min == null ||\r\n [controlValueFrom, controlValueTo].every(value =>\r\n value == null || this.dateTimeAdapter.compare(this.min, value) <= 0\r\n )\r\n ? null\r\n : {\r\n owlDateTimeMin: {\r\n min: this.min,\r\n actual: [controlValueFrom, controlValueTo]\r\n }\r\n };\r\n }\r\n }\r\n\r\n /** Валидатор максимальной даты */\r\n private maxValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n if (this.isInSingleMode) {\r\n const controlValue = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value)\r\n );\r\n return this.max == null ||\r\n controlValue == null ||\r\n this.dateTimeAdapter.compare(this.max, controlValue) >= 0\r\n ? null\r\n : { owlDateTimeMax: { max: this.max, actual: controlValue } };\r\n } else if (this.isInRangeMode && control.value) {\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n );\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n );\r\n return this.max == null ||\r\n [controlValueFrom, controlValueTo].every(value =>\r\n value == null || this.dateTimeAdapter.compare(this.max, value) >= 0\r\n )\r\n ? null\r\n : {\r\n owlDateTimeMax: {\r\n max: this.max,\r\n actual: [controlValueFrom, controlValueTo]\r\n }\r\n };\r\n }\r\n }\r\n\r\n /** Валидатор соответствия фильтру дат */\r\n private filterValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n const values = this.isInRangeMode && Array.isArray(control.value)\r\n ? control.value\r\n : [control.value];\r\n return !this._dateTimeFilter || values.every(value => {\r\n const date = this.getValidDate(this.dateTimeAdapter.deserialize(value));\r\n return date == null || this._dateTimeFilter(date);\r\n }) ? null : { owlDateTimeFilter: true };\r\n }\r\n\r\n /**\r\n * Валидатор диапазона дат\r\n * Проверяет, что начало диапазона находится не позже конца ('to')\r\n * */\r\n private rangeValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n if (this.isInSingleMode || !control.value) {\r\n return null;\r\n }\r\n\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n );\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n );\r\n\r\n return controlValueFrom == null ||\r\n controlValueTo == null ||\r\n this.dateTimeAdapter.compare(controlValueFrom, controlValueTo) <= 0\r\n ? null\r\n : { owlDateTimeRange: true };\r\n }\r\n\r\n /**\r\n * Валидатор обязательного диапазона дат\r\n * Проверяет наличие обеих границ диапазона\r\n * */\r\n private requiredRangeValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n if (this.isInSingleMode || !control.value || !this.required) {\r\n return null;\r\n }\r\n\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n );\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n );\r\n\r\n return controlValueFrom == null ||\r\n controlValueTo == null\r\n ? { owlRequiredDateTimeRange: [controlValueFrom, controlValueTo] }\r\n : null;\r\n }\r\n\r\n /** Объединённый валидатор этого поля ввода */\r\n private validator: ValidatorFn | null = Validators.compose([\r\n this.parseValidator,\r\n this.minValidator,\r\n this.maxValidator,\r\n this.filterValidator,\r\n this.rangeValidator,\r\n this.requiredRangeValidator\r\n ]);\r\n\r\n /** Событие изменения значения пользователем или программно */\r\n public valueChange = new EventEmitter<T[] | T | null>();\r\n\r\n /** Событие изменения состояния disabled */\r\n public disabledChange = new EventEmitter<boolean>();\r\n\r\n get owlDateTimeInputAriaHaspopup(): boolean {\r\n return true;\r\n }\r\n\r\n get owlDateTimeInputAriaOwns(): string {\r\n return (this.dtPicker?.opened && this.dtPicker.id) || null;\r\n }\r\n\r\n get minIso8601(): string {\r\n return this.min != null ? this.dateTimeAdapter.toIso8601(this.min) : null;\r\n }\r\n\r\n get maxIso8601(): string {\r\n return this.max != null ? this.dateTimeAdapter.toIso8601(this.max) : null;\r\n }\r\n\r\n get owlDateTimeInputDisabled(): boolean {\r\n return this.disabled;\r\n }\r\n\r\n constructor(\r\n private elmRef: ElementRef,\r\n private renderer: Renderer2,\r\n @Optional()\r\n private dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional() @Inject(OWL_DATE_TIME_FORMATS)\r\n private dateTimeFormats: OwlDateTimeFormats,\r\n private changeDetector: ChangeDetectorRef ) {\r\n if (!this.dateTimeAdapter) {\r\n throw Error(\r\n `OwlDateTimePicker: No provider found for DateTimeAdapter. You must import ` +\r\n `OwlLuxonDateTimeModule at your application root or provide a custom implementation.`\r\n );\r\n }\r\n\r\n if (!this.dateTimeFormats) {\r\n throw Error(\r\n `OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import ` +\r\n `OwlLuxonDateTimeModule at your application root or provide custom formats.`\r\n );\r\n }\r\n\r\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(() => {\r\n this.value = this.value;\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n if (!this.dtPicker) {\r\n throw Error(\r\n `OwlDateTimePicker: the picker input doesn't have any associated owl-date-time component`\r\n );\r\n }\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.dtPickerSub = this.dtPicker.confirmSelectedChange.subscribe(\r\n (selecteds: T[] | T) => {\r\n if (Array.isArray(selecteds)) {\r\n this.values = selecteds;\r\n } else {\r\n this.value = selecteds;\r\n }\r\n\r\n this.onModelChange(selecteds);\r\n this.onModelTouched();\r\n this.dateTimeChange.emit({\r\n source: this,\r\n value: selecteds,\r\n input: this.elmRef.nativeElement\r\n });\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: selecteds,\r\n input: this.elmRef.nativeElement\r\n });\r\n }\r\n );\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.dtPickerSub.unsubscribe();\r\n this.localeSub.unsubscribe();\r\n this.valueChange.complete();\r\n this.disabledChange.complete();\r\n }\r\n\r\n public writeValue(value: any): void {\r\n if (this.isInSingleMode) {\r\n this.value = value;\r\n } else {\r\n this.values = value;\r\n }\r\n }\r\n\r\n public registerOnChange(fn: any): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: any): void {\r\n this.onModelTouched = fn;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n public validate(c: AbstractControl): { [key: string]: any } {\r\n return this.validator ? this.validator(c) : null;\r\n }\r\n\r\n public registerOnValidatorChange(fn: () => void): void {\r\n this.validatorOnChange = fn;\r\n }\r\n\r\n /**\r\n * Открывает компонент выбора по сочетанию Alt + ArrowDown\r\n * */\r\n public handleKeydownOnHost(event: KeyboardEvent ): void {\r\n if (event.altKey && event.keyCode === DOWN_ARROW) {\r\n this.dtPicker.open();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n public handleBlurOnHost(event: Event ): void {\r\n this.onModelTouched();\r\n }\r\n\r\n public handleInputOnHost(event: any ): void {\r\n const value = event.target.value;\r\n if (this._selectMode === 'single') {\r\n this.changeInputInSingleMode(value);\r\n } else if (this._selectMode === 'range') {\r\n this.changeInputInRangeMode(value);\r\n } else {\r\n this.changeInputInRangeFromToMode(value);\r\n }\r\n }\r\n\r\n public handleChangeOnHost(event: any ): void {\r\n\r\n let v;\r\n if (this.isInSingleMode) {\r\n v = this.value;\r\n } else if (this.isInRangeMode) {\r\n v = this.values;\r\n }\r\n\r\n this.dateTimeChange.emit({\r\n source: this,\r\n value: v,\r\n input: this.elmRef.nativeElement\r\n });\r\n }\r\n\r\n /**\r\n * Задаёт свойство 'value' нативного поля ввода\r\n */\r\n public formatNativeInputValue(): void {\r\n if (this.isInSingleMode) {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n this._value != null\r\n ? this.dateTimeAdapter.format(\r\n this._value,\r\n this.dtPicker.formatString\r\n )\r\n : ''\r\n );\r\n } else if (this.isInRangeMode) {\r\n if (this._values && this.values.length > 0) {\r\n const from = this._values[0];\r\n const to = this._values[1];\r\n\r\n const fromFormatted = from != null\r\n ? this.dateTimeAdapter.format(\r\n from,\r\n this.dtPicker.formatString\r\n )\r\n : '';\r\n const toFormatted = to != null\r\n ? this.dateTimeAdapter.format(\r\n to,\r\n this.dtPicker.formatString\r\n )\r\n : '';\r\n\r\n if (!fromFormatted && !toFormatted) {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n null\r\n );\r\n } else {\r\n if (this._selectMode === 'range') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n fromFormatted +\r\n ' ' +\r\n this.rangeSeparator +\r\n ' ' +\r\n toFormatted\r\n );\r\n } else if (this._selectMode === 'rangeFrom') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n fromFormatted\r\n );\r\n } else if (this._selectMode === 'rangeTo') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n toFormatted\r\n );\r\n }\r\n }\r\n } else {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n ''\r\n );\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Регистрирует связь между полем ввода и компонентом выбора\r\n */\r\n private registerDateTimePicker(picker: OwlDateTimeComponent<T>) {\r\n if (picker) {\r\n this.dtPicker = picker;\r\n this.dtPicker.registerInput(this);\r\n }\r\n }\r\n\r\n /**\r\n * Преобразует указанный объект в корректный объект даты\r\n */\r\n private getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n\r\n /**\r\n * Преобразует строку времени в строку даты и времени\r\n * При pickerType равном 'timer' поле ввода содержит строку времени\r\n * Метод parse адаптера dateTimeAdapter не может разобрать строку времени как объект даты\r\n * Поэтому эта функция преобразует строку времени в строку даты и времени\r\n */\r\n private convertTimeStringToDateTimeString(\r\n timeString: string,\r\n dateTime: T\r\n ): string | null {\r\n if (timeString) {\r\n const v = dateTime ?? this.dateTimeAdapter.now();\r\n const dateString = this.dateTimeAdapter.format(\r\n v,\r\n this.dateTimeFormats.datePickerInput\r\n );\r\n return dateString + ' ' + timeString;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Обрабатывает изменение поля ввода в режиме single\r\n */\r\n private changeInputInSingleMode(inputValue: string): void {\r\n let value = inputValue;\r\n if (this.dtPicker.pickerType === 'timer') {\r\n value = this.convertTimeStringToDateTimeString(value, this.value);\r\n }\r\n\r\n let result = this.dateTimeAdapter.parse(\r\n value,\r\n this.dateTimeFormats.parseInput\r\n );\r\n this.lastValueValid = result == null || this.dateTimeAdapter.isValid(result);\r\n result = this.getValidDate(result);\r\n\r\n // Если newValue совпадает с oldValue, не отправляем событие valueChange\r\n // result равный null означает, что событие ввода произошло, но значение недопустимо\r\n if (!this.isSameValue(result, this._value) || result === null) {\r\n this._value = result;\r\n this.valueChange.emit(result);\r\n this.onModelChange(result);\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: result,\r\n input: this.elmRef.nativeElement\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Обрабатывает изменение поля ввода в режиме rangeFrom или rangeTo\r\n */\r\n private changeInputInRangeFromToMode(inputValue: string): void {\r\n const originalValue =\r\n this._selectMode === 'rangeFrom'\r\n ? this._values[0]\r\n : this._values[1];\r\n\r\n if (this.dtPicker.pickerType === 'timer') {\r\n inputValue = this.convertTimeStringToDateTimeString(\r\n inputValue,\r\n originalValue\r\n );\r\n }\r\n\r\n let result = this.dateTimeAdapter.parse(\r\n inputValue,\r\n this.dateTimeFormats.parseInput\r\n );\r\n this.lastValueValid = result == null || this.dateTimeAdapter.isValid(result);\r\n result = this.getValidDate(result);\r\n\r\n // Если newValue совпадает с oldValue, не отправляем событие valueChange\r\n if (\r\n (this._selectMode === 'rangeFrom' &&\r\n this.isSameValue(result, this._values[0]) &&\r\n result) ||\r\n (this._selectMode === 'rangeTo' &&\r\n this.isSameValue(result, this._values[1]) &&\r\n result)\r\n ) {\r\n return;\r\n }\r\n\r\n this._values =\r\n this._selectMode === 'rangeFrom'\r\n ? [result, this._values[1]]\r\n : [this._values[0], result];\r\n this.valueChange.emit(this._values);\r\n this.onModelChange(this._values);\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: this._values,\r\n input: this.elmRef.nativeElement\r\n });\r\n }\r\n\r\n /**\r\n * Обрабатывает изменение поля ввода в режиме range\r\n */\r\n private changeInputInRangeMode(inputValue: string): void {\r\n const wasValid = this.lastValueValid;\r\n const selecteds = inputValue.split(this.rangeSeparator).map(value => value.trim());\r\n let fromString = selecteds[0];\r\n let toString = selecteds[1];\r\n\r\n if (this.dtPicker.pickerType === 'timer') {\r\n fromString = this.convertTimeStringToDateTimeString(\r\n fromString,\r\n this.values[0]\r\n );\r\n toString = this.convertTimeStringToDateTimeString(\r\n toString,\r\n this.values[1]\r\n );\r\n }\r\n\r\n let from = this.dateTimeAdapter.parse(\r\n fromString,\r\n this.dateTimeFormats.parseInput\r\n );\r\n let to = this.dateTimeAdapter.parse(\r\n toString,\r\n this.dateTimeFormats.parseInput\r\n );\r\n this.lastValueValid =\r\n (from == null || this.dateTimeAdapter.isValid(from)) &&\r\n (to == null || this.dateTimeAdapter.isValid(to));\r\n from = this.getValidDate(from);\r\n to = this.getValidDate(to);\r\n\r\n // Если newValue совпадает с oldValue, не отправляем событие valueChange\r\n if (\r\n !this.isSameValue(from, this._values[0]) ||\r\n !this.isSameValue(to, this._values[1]) ||\r\n wasValid !== this.lastValueValid ||\r\n (from === null && to === null)\r\n ) {\r\n this._values = [from, to];\r\n this.valueChange.emit(this._values);\r\n this.onModelChange(this._values);\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: this._values,\r\n input: this.elmRef.nativeElement\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Проверяет равенство двух значений\r\n */\r\n private isSameValue(first: T | null, second: T | null): boolean {\r\n if (first != null && second != null) {\r\n return this.dateTimeAdapter.compare(first, second) === 0;\r\n }\r\n\r\n return first === second;\r\n }\r\n}\r\n","/**\r\n * numberFixedLen.pipe\r\n */\r\n\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'numberFixedLen',\r\n standalone: false,\r\n})\r\nexport class NumberFixedLenPipe implements PipeTransform {\r\n transform( num: number, len: number ): any {\r\n const number = Math.floor(num);\r\n const length = Math.floor(len);\r\n\r\n if (num === null || isNaN(number) || isNaN(length)) {\r\n return num;\r\n }\r\n\r\n let numString = number.toString();\r\n\r\n while (numString.length < length) {\r\n numString = '0' + numString;\r\n }\r\n\r\n return numString;\r\n }\r\n}\r\n","/**\r\n * date-time-inline.component\r\n */\r\n\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, EventEmitter,\r\n forwardRef,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport {\r\n OwlDateTime,\r\n PickerMode,\r\n PickerType,\r\n SelectMode\r\n} from './date-time.class';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport {\r\n OWL_DATE_TIME_FORMATS,\r\n OwlDateTimeFormats\r\n} from './adapter/date-time-format.class';\r\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\r\n\r\nexport const OWL_DATETIME_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => OwlDateTimeInlineComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: 'owl-date-time-inline',\r\n templateUrl: './date-time-inline.component.html',\r\n styleUrls: ['./date-time-inline.component.scss'],\r\n host: {\r\n '[class.owl-dt-inline]': 'owlDTInlineClass',\r\n '[attr.aria-disabled]': 'disabled || null'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n preserveWhitespaces: false,\r\n providers: [OWL_DATETIME_VALUE_ACCESSOR]\r\n})\r\nexport class OwlDateTimeInlineComponent<T> extends OwlDateTime<T>\r\n implements OnInit, ControlValueAccessor {\r\n @ViewChild(OwlDateTimeContainerComponent, { static: true })\r\n container: OwlDateTimeContainerComponent<T>;\r\n\r\n /**\r\n * Задаёт тип компонента выбора даты и времени:\r\n * 'both' — календарь и выбор времени\r\n * 'calendar' — только календарь\r\n * 'timer' — только выбор времени\r\n */\r\n private _pickerType: PickerType = 'both';\r\n @Input()\r\n get pickerType(): PickerType {\r\n return this._pickerType;\r\n }\r\n\r\n set pickerType(val: PickerType) {\r\n if (val !== this._pickerType) {\r\n this._pickerType = val;\r\n }\r\n }\r\n\r\n private _disabled = false;\r\n @Input()\r\n get disabled(): boolean {\r\n return !!this._disabled;\r\n }\r\n\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this.changeDetector.markForCheck();\r\n this.container?.refreshView();\r\n }\r\n\r\n private _selectMode: SelectMode = 'single';\r\n @Input()\r\n get selectMode() {\r\n return this._selectMode;\r\n }\r\n\r\n set selectMode(mode: SelectMode) {\r\n if (\r\n mode !== 'single' &&\r\n mode !== 'range' &&\r\n mode !== 'rangeFrom' &&\r\n mode !== 'rangeTo'\r\n ) {\r\n throw Error('OwlDateTime Error: invalid selectMode value!');\r\n }\r\n\r\n this._selectMode = mode;\r\n }\r\n\r\n /** Дата, на которой календарь открывается изначально */\r\n private _startAt: T | null;\r\n @Input()\r\n get startAt(): T | null {\r\n if (this._startAt != null) {\r\n return this._startAt;\r\n }\r\n\r\n if (this.selectMode === 'single') {\r\n return this.value ?? null;\r\n } else if (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom'\r\n ) {\r\n return this.values[0] ?? null;\r\n } else if (this.selectMode === 'rangeTo') {\r\n return this.values[1] ?? null;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n set startAt(date: T | null) {\r\n this._startAt = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(date)\r\n );\r\n }\r\n\r\n /** Дата открытия календаря в режиме диапазона */\r\n private _endAt: T | null;\r\n @Input()\r\n get endAt(): T | null {\r\n if (this._endAt != null) {\r\n return this._endAt;\r\n }\r\n\r\n if (this.selectMode === 'single') {\r\n return this.value ?? null;\r\n } else if (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom'\r\n ) {\r\n return this.values[1] ?? null;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n set endAt(date: T | null) {\r\n this._endAt = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(date)\r\n );\r\n }\r\n\r\n private _dateTimeFilter: (date: T | null) => boolean;\r\n @Input('owlDateTimeFilter')\r\n get dateTimeFilter() {\r\n return this._dateTimeFilter;\r\n }\r\n\r\n set dateTimeFilter(filter: (date: T | null) => boolean) {\r\n this._dateTimeFilter = filter;\r\n }\r\n\r\n /** Минимальная допустимая дата */\r\n private _min: T | null;\r\n\r\n get minDateTime(): T | null {\r\n return this._min ?? null;\r\n }\r\n\r\n @Input('min')\r\n set minDateTime(value: T | null) {\r\n this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /** Максимальная допустимая дата */\r\n private _max: T | null;\r\n\r\n get maxDateTime(): T | null {\r\n return this._max ?? null;\r\n }\r\n\r\n @Input('max')\r\n set maxDateTime(value: T | null) {\r\n this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n private _value: T | null;\r\n @Input()\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n set value(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n value = this.getValidDate(value);\r\n this._value = value;\r\n this.selected = value;\r\n }\r\n\r\n private _values: (T | null)[] = [];\r\n @Input()\r\n get values() {\r\n return this._values;\r\n }\r\n\r\n set values(values: (T | null)[]) {\r\n if (values && values.length > 0) {\r\n values = values.map(v => {\r\n v = this.dateTimeAdapter.deserialize(v);\r\n v = this.getValidDate(v);\r\n return v != null ? this.dateTimeAdapter.clone(v) : null;\r\n });\r\n this._values = [...values];\r\n this.selecteds = [...values];\r\n } else {\r\n this._values = [];\r\n this.selecteds = [];\r\n }\r\n }\r\n\r\n /**\r\n * Передаёт выбранный год в представлении нескольких лет\r\n * При этом выбранная дата не изменяется\r\n * */\r\n @Output()\r\n yearSelected = new EventEmitter<T>();\r\n\r\n /**\r\n * Передаёт выбранный месяц в представлении года\r\n * При этом выбранная дата не изменяется\r\n * */\r\n @Output()\r\n monthSelected = new EventEmitter<T>();\r\n\r\n /**\r\n * Передаёт выбранную дату\r\n * */\r\n @Output()\r\n dateSelected = new EventEmitter<T>();\r\n\r\n private _selected: T | null;\r\n get selected() {\r\n return this._selected;\r\n }\r\n\r\n set selected(value: T | null) {\r\n this._selected = value;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n private _selecteds: T[] = [];\r\n get selecteds() {\r\n return this._selecteds;\r\n }\r\n\r\n set selecteds(values: T[]) {\r\n this._selecteds = values;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n get opened(): boolean {\r\n return true;\r\n }\r\n\r\n get pickerMode(): PickerMode {\r\n return 'inline';\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this._selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this._selectMode === 'range' ||\r\n this._selectMode === 'rangeFrom' ||\r\n this._selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n get owlDTInlineClass(): boolean {\r\n return true;\r\n }\r\n\r\n private onModelChange: Function = () => { };\r\n private onModelTouched: Function = () => { };\r\n\r\n constructor(\r\n protected changeDetector: ChangeDetectorRef,\r\n @Optional() protected dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n protected dateTimeFormats: OwlDateTimeFormats\r\n ) {\r\n super(dateTimeAdapter, dateTimeFormats);\r\n }\r\n\r\n public ngOnInit() {\r\n this.container.picker = this;\r\n }\r\n\r\n public writeValue(value: any): void {\r\n if (this.isInSingleMode) {\r\n this.value = value;\r\n this.container.pickerDateTime = value;\r\n } else {\r\n this.values = value;\r\n this.container.pickerDateTime = this._values[\r\n this.container.activeSelectedIndex\r\n ];\r\n }\r\n }\r\n\r\n public registerOnChange(fn: any): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: any): void {\r\n this.onModelTouched = fn;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n public select(date: T[] | T): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n if (Array.isArray(date)) {\r\n this.values = [...date];\r\n } else {\r\n this.value = date;\r\n }\r\n this.onModelChange(date);\r\n this.onModelTouched();\r\n }\r\n\r\n /**\r\n * Передаёт выбранный год в представлении нескольких лет\r\n * */\r\n public selectYear(normalizedYear: T): void {\r\n this.yearSelected.emit(normalizedYear);\r\n }\r\n\r\n /**\r\n * Передаёт выбранный месяц в представлении года\r\n * */\r\n public selectMonth(normalizedMonth: T): void {\r\n this.monthSelected.emit(normalizedMonth);\r\n }\r\n\r\n /**\r\n * Передаёт выбранную дату\r\n * */\r\n public selectDate(normalizedDate: T): void {\r\n this.dateSelected.emit(normalizedDate);\r\n }\r\n}\r\n","<owl-date-time-container></owl-date-time-container>","/**\r\n * dialog.module\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { OWL_DIALOG_SCROLL_STRATEGY_PROVIDER, OwlDialogService } from './dialog.service';\r\nimport { OwlDialogContainerComponent } from './dialog-container.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule, A11yModule, OverlayModule, PortalModule],\r\n exports: [],\r\n declarations: [\r\n OwlDialogContainerComponent,\r\n ],\r\n providers: [\r\n OWL_DIALOG_SCROLL_STRATEGY_PROVIDER,\r\n OwlDialogService,\r\n ]\r\n})\r\nexport class OwlDialogModule {\r\n}\r\n","/**\r\n * date-time.module\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { OwlDateTimeTriggerDirective } from './date-time-picker-trigger.directive';\r\nimport { OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER, OwlDateTimeComponent } from './date-time-picker.component';\r\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\r\nimport { OwlDateTimeInputDirective } from './date-time-picker-input.directive';\r\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\r\nimport { OwlMonthViewComponent } from './calendar-month-view.component';\r\nimport { OwlCalendarBodyComponent } from './calendar-body.component';\r\nimport { OwlYearViewComponent } from './calendar-year-view.component';\r\nimport { OwlMultiYearViewComponent } from './calendar-multi-year-view.component';\r\nimport { OwlTimerBoxComponent } from './timer-box.component';\r\nimport { OwlTimerComponent } from './timer.component';\r\nimport { NumberFixedLenPipe } from './numberedFixLen.pipe';\r\nimport { OwlCalendarComponent } from './calendar.component';\r\nimport { OwlDateTimeInlineComponent } from './date-time-inline.component';\r\nimport { OwlDialogModule } from '../dialog/dialog.module';\r\nimport { optionsProviders } from './options-provider';\r\n\r\n@NgModule({\r\n imports: [CommonModule, OverlayModule, OwlDialogModule, A11yModule],\r\n exports: [\r\n OwlCalendarComponent,\r\n OwlTimerComponent,\r\n OwlDateTimeTriggerDirective,\r\n OwlDateTimeInputDirective,\r\n OwlDateTimeComponent,\r\n OwlDateTimeInlineComponent,\r\n OwlMultiYearViewComponent,\r\n OwlYearViewComponent,\r\n OwlMonthViewComponent,\r\n ],\r\n declarations: [\r\n OwlDateTimeTriggerDirective,\r\n OwlDateTimeInputDirective,\r\n OwlDateTimeComponent,\r\n OwlDateTimeContainerComponent,\r\n OwlMultiYearViewComponent,\r\n OwlYearViewComponent,\r\n OwlMonthViewComponent,\r\n OwlTimerComponent,\r\n OwlTimerBoxComponent,\r\n OwlCalendarComponent,\r\n OwlCalendarBodyComponent,\r\n NumberFixedLenPipe,\r\n OwlDateTimeInlineComponent,\r\n ],\r\n providers: [\r\n OwlDateTimeIntl,\r\n OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER,\r\n ...optionsProviders,\r\n ]\r\n})\r\nexport class OwlDateTimeModule {\r\n}\r\n","/**\r\n * luxon-date-time-adapter.class\r\n */\r\n\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { DateTime, Info, Settings } from 'luxon';\r\n\r\nimport {\r\n DateTimeAdapter,\r\n OWL_DATE_TIME_LOCALE,\r\n} from './date-time-adapter.class';\r\n\r\n@Injectable()\r\nexport class LuxonDateTimeAdapter extends DateTimeAdapter<DateTime> {\r\n public firstMonthOfTheYear = 0;\r\n\r\n /**\r\n * 0 - воскресенье\r\n * 1 - понедельник\r\n * ...\r\n * 6 - суббота\r\n */\r\n public firstDayOfTheWeek = 0;\r\n\r\n public constructor(\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_LOCALE)\r\n private owlDateTimeLocale: string,\r\n ) {\r\n super();\r\n\r\n this.setLocale(owlDateTimeLocale || Settings.defaultLocale || 'ru');\r\n }\r\n\r\n public getYear(date: DateTime): number {\r\n return date.year;\r\n }\r\n\r\n /**\r\n * Компонент выбора даты ожидает индекс месяца:\r\n * 0 - январь\r\n * 11 - декабрь\r\n *\r\n * Luxon использует:\r\n * 1 - январь\r\n * 12 - декабрь\r\n */\r\n public getMonth(date: DateTime): number {\r\n return date.month - 1;\r\n }\r\n\r\n /**\r\n * Компонент выбора даты ожидает:\r\n * 0 - воскресенье\r\n * 6 - суббота\r\n *\r\n * День недели в Luxon:\r\n * 1 - понедельник\r\n * 7 - воскресенье\r\n */\r\n public getDay(date: DateTime): number {\r\n return date.weekday % 7;\r\n }\r\n\r\n public getDate(date: DateTime): number {\r\n return date.day;\r\n }\r\n\r\n public getHours(date: DateTime): number {\r\n return date.hour;\r\n }\r\n\r\n public getMinutes(date: DateTime): number {\r\n return date.minute;\r\n }\r\n\r\n public getSeconds(date: DateTime): number {\r\n return date.second;\r\n }\r\n\r\n public getTime(date: DateTime): number {\r\n return date.toMillis();\r\n }\r\n\r\n public getNumDaysInMonth(date: DateTime): number {\r\n return date.daysInMonth ?? 0;\r\n }\r\n\r\n public differenceInCalendarDays(dateLeft: DateTime, dateRight: DateTime): number {\r\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\r\n return Math.round(\r\n DateTime.utc(dateLeft.year, dateLeft.month, dateLeft.day).diff(\n DateTime.utc(dateRight.year, dateRight.month, dateRight.day),\n 'days',\n ).days,\r\n );\r\n }\r\n\r\n return Number.NaN;\r\n }\r\n\r\n public getYearName(date: DateTime): string {\r\n return date.setLocale(this.locale).toFormat('yyyy');\r\n }\r\n\r\n public getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n return Info.months(style, { locale: this.locale });\r\n }\r\n\r\n public getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const weekdays = Info.weekdays(style, { locale: this.locale });\r\n\r\n // Luxon возвращает дни недели от понедельника до воскресенья\r\n // Компонент выбора даты ожидает порядок от воскресенья до субботы\r\n return [\r\n weekdays[6],\r\n ...weekdays.slice(0, 6),\r\n ];\r\n }\r\n\r\n public getDateNames(): string[] {\r\n return Array.from({ length: 31 }, (_, index) => `${index + 1}`);\r\n }\r\n\r\n public toIso8601(date: DateTime): string {\r\n return date.toISO() ?? '';\r\n }\r\n\r\n public isEqual(dateLeft: DateTime, dateRight: DateTime): boolean {\r\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\r\n return dateLeft.toMillis() === dateRight.toMillis();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public isSameDay(dateLeft: DateTime, dateRight: DateTime): boolean {\r\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\r\n return (\r\n dateLeft.year === dateRight.year &&\r\n dateLeft.month === dateRight.month &&\r\n dateLeft.day === dateRight.day\r\n );\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public isValid(date: DateTime): boolean {\r\n return DateTime.isDateTime(date) && date.isValid;\r\n }\r\n\r\n public invalid(): DateTime {\r\n return DateTime.invalid('Invalid date');\r\n }\r\n\r\n public isDateInstance(obj: unknown): boolean {\r\n return DateTime.isDateTime(obj);\r\n }\r\n\r\n public addCalendarYears(date: DateTime, amount: number): DateTime {\r\n return date.plus({ years: Number(amount) });\r\n }\r\n\r\n public addCalendarMonths(date: DateTime, amount: number): DateTime {\r\n return date.plus({ months: Number(amount) });\r\n }\r\n\r\n public addCalendarDays(date: DateTime, amount: number): DateTime {\r\n return date.plus({ days: Number(amount) });\r\n }\r\n\r\n public setHours(date: DateTime, amount: number): DateTime {\r\n return date.set({ hour: amount });\r\n }\r\n\r\n public setMinutes(date: DateTime, amount: number): DateTime {\r\n return date.set({ minute: amount });\r\n }\r\n\r\n public setSeconds(date: DateTime, amount: number): DateTime {\r\n return date.set({ second: amount });\r\n }\r\n\r\n public createDate(\r\n year: number,\r\n month: number,\r\n date: number,\r\n hours = 0,\r\n minutes = 0,\r\n seconds = 0,\r\n ): DateTime {\r\n if (hours < 0 || hours > 23) {\r\n throw Error(`LuxonDateTimeAdapter: Invalid hours \"${hours}\". Hours must be between 0 and 23.`);\r\n }\r\n\r\n const result = DateTime.local(\r\n year,\r\n month + 1,\r\n date,\r\n hours,\r\n minutes,\r\n seconds,\r\n 0,\r\n ).setLocale(this.locale);\r\n\r\n if (!result.isValid) {\r\n throw Error(\r\n `LuxonDateTimeAdapter: Invalid date \"${date}\" for month with index \"${month}\".`,\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public clone(date: DateTime): DateTime {\r\n return DateTime.fromMillis(date.toMillis(), {\r\n zone: date.zone,\r\n locale: date.locale,\r\n });\r\n }\r\n\r\n public now(): DateTime {\r\n return DateTime.local().setLocale(this.locale);\r\n }\r\n\r\n public format(date: DateTime, displayFormat: string): string {\r\n if (!this.isValid(date)) {\r\n throw Error('LuxonDateTimeAdapter: Cannot format invalid date.');\r\n }\r\n\r\n return date.setLocale(this.locale).toFormat(displayFormat);\r\n }\r\n\r\n public parse(value: unknown, parseFormat: string | string[] | null): DateTime | null {\r\n if (value == null || value === '') {\r\n return null;\r\n }\r\n\r\n if (DateTime.isDateTime(value)) {\r\n return value.isValid ? value.setLocale(this.locale) : this.invalid();\r\n }\r\n\r\n if (value instanceof Date) {\r\n const date = DateTime.fromJSDate(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date : this.invalid();\r\n }\r\n\r\n if (typeof value === 'number') {\r\n const date = DateTime.fromMillis(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date : this.invalid();\r\n }\r\n\r\n if (typeof value !== 'string') {\r\n return this.invalid();\r\n }\r\n\r\n const formats = Array.isArray(parseFormat) ? parseFormat : parseFormat ? [parseFormat] : [];\r\n\r\n for (const format of formats) {\r\n const parsed = DateTime.fromFormat(value, format, {\r\n locale: this.locale,\r\n });\r\n\r\n if (parsed.isValid) {\r\n return parsed;\r\n }\r\n }\r\n\r\n const iso = DateTime.fromISO(value, {\r\n locale: this.locale,\r\n });\r\n\r\n return iso.isValid ? iso : this.invalid();\r\n }\r\n\r\n public deserialize(value: unknown): DateTime | null {\r\n if (value == null || value === '') {\r\n return null;\r\n }\r\n\r\n if (DateTime.isDateTime(value)) {\r\n return value.isValid ? value.setLocale(this.locale) : this.invalid();\r\n }\r\n\r\n if (value instanceof Date) {\r\n const date = DateTime.fromJSDate(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date : this.invalid();\r\n }\r\n\r\n if (typeof value === 'number') {\r\n const date = DateTime.fromMillis(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date : this.invalid();\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const date = DateTime.fromISO(value, {\r\n locale: this.locale,\r\n });\r\n\r\n return date.isValid ? date : this.invalid();\r\n }\r\n\r\n return this.invalid();\r\n }\r\n\r\n public override setLocale(locale: string): void {\r\n super.setLocale(locale || 'ru');\r\n }\r\n}\r\n","import { OwlDateTimeFormats } from './date-time-format.class';\r\n\r\nexport const OWL_LUXON_DATE_TIME_FORMATS: OwlDateTimeFormats = {\r\n parseInput: 'dd.MM.yyyy HH:mm',\r\n fullPickerInput: 'dd.MM.yyyy HH:mm',\r\n datePickerInput: 'dd.MM.yyyy',\r\n timePickerInput: 'HH:mm',\r\n monthYearLabel: 'LLL yyyy',\r\n dateA11yLabel: 'dd.MM.yyyy',\r\n monthYearA11yLabel: 'LLLL yyyy',\r\n};\r\n","/**\r\n * luxon-date-time.module\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { DateTimeAdapter } from './date-time-adapter.class';\r\nimport { OWL_DATE_TIME_FORMATS } from './date-time-format.class';\r\nimport { LuxonDateTimeAdapter } from './luxon-date-time-adapter.class';\r\nimport { OWL_LUXON_DATE_TIME_FORMATS } from './luxon-date-time-format.class';\r\n\r\n@NgModule({\r\n providers: [\r\n {\r\n provide: DateTimeAdapter,\r\n useClass: LuxonDateTimeAdapter,\r\n },\r\n ],\r\n})\r\nexport class LuxonDateTimeModule {}\r\n\r\n@NgModule({\r\n imports: [LuxonDateTimeModule],\r\n providers: [\r\n {\r\n provide: OWL_DATE_TIME_FORMATS,\r\n useValue: OWL_LUXON_DATE_TIME_FORMATS,\r\n },\r\n ],\r\n})\r\nexport class OwlLuxonDateTimeModule {}\r\n","/**\r\n * unix-timestamp-date-time-adapter.class\r\n */\r\n\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { DateTime, Info, Settings } from 'luxon';\r\n\r\nimport {\r\n DateTimeAdapter,\r\n OWL_DATE_TIME_LOCALE,\r\n} from '../date-time-adapter.class';\r\n\r\n@Injectable()\r\nexport class UnixTimestampDateTimeAdapter extends DateTimeAdapter<number> {\r\n public firstMonthOfTheYear = 0;\r\n\r\n /**\r\n * Компонент выбора даты ожидает:\r\n * 0 - воскресенье\r\n * 1 - понедельник\r\n * ...\r\n * 6 - суббота\r\n */\r\n public firstDayOfTheWeek = 0;\r\n\r\n public constructor(\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_LOCALE)\r\n private owlDateTimeLocale: string,\r\n ) {\r\n super();\r\n\r\n this.setLocale(owlDateTimeLocale || Settings.defaultLocale || 'ru');\r\n }\r\n\r\n public getYear(date: number): number {\r\n return this.fromTimestamp(date).year;\r\n }\r\n\r\n /**\r\n * Компонент выбора даты ожидает:\r\n * 0 - январь\r\n * 11 - декабрь\r\n *\r\n * Luxon использует:\r\n * 1 - январь\r\n * 12 - декабрь\r\n */\r\n public getMonth(date: number): number {\r\n return this.fromTimestamp(date).month - 1;\r\n }\r\n\r\n /**\r\n * Компонент выбора даты ожидает:\r\n * 0 - воскресенье\r\n * 6 - суббота\r\n *\r\n * День недели в Luxon:\r\n * 1 - понедельник\r\n * 7 - воскресенье\r\n */\r\n public getDay(date: number): number {\r\n return this.fromTimestamp(date).weekday % 7;\r\n }\r\n\r\n public getDate(date: number): number {\r\n return this.fromTimestamp(date).day;\r\n }\r\n\r\n public getHours(date: number): number {\r\n return this.fromTimestamp(date).hour;\r\n }\r\n\r\n public getMinutes(date: number): number {\r\n return this.fromTimestamp(date).minute;\r\n }\r\n\r\n public getSeconds(date: number): number {\r\n return this.fromTimestamp(date).second;\r\n }\r\n\r\n public getTime(date: number): number {\r\n return date;\r\n }\r\n\r\n public getNumDaysInMonth(date: number): number {\r\n return this.fromTimestamp(date).daysInMonth ?? 0;\r\n }\r\n\r\n public differenceInCalendarDays(dateLeft: number, dateRight: number): number {\r\n if (!this.isValid(dateLeft) || !this.isValid(dateRight)) {\r\n return Number.NaN;\r\n }\r\n\r\n return Math.round(\r\n this.fromTimestamp(dateLeft)\r\n .startOf('day')\r\n .diff(this.fromTimestamp(dateRight).startOf('day'), 'days').days,\r\n );\r\n }\r\n\r\n public getYearName(date: number): string {\r\n return this.fromTimestamp(date).toFormat('yyyy');\r\n }\r\n\r\n public getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n return Info.months(style, { locale: this.locale });\r\n }\r\n\r\n public getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const weekdays = Info.weekdays(style, { locale: this.locale });\r\n\r\n // Luxon возвращает дни недели от понедельника до воскресенья\r\n // Компонент выбора даты ожидает порядок от воскресенья до субботы\r\n return [\r\n weekdays[6],\r\n ...weekdays.slice(0, 6),\r\n ];\r\n }\r\n\r\n public getDateNames(): string[] {\r\n return Array.from({ length: 31 }, (_, index) => `${index + 1}`);\r\n }\r\n\r\n public toIso8601(date: number): string {\r\n return this.fromTimestamp(date).toISO() ?? '';\r\n }\r\n\r\n public isEqual(dateLeft: number, dateRight: number): boolean {\r\n if (!this.isValid(dateLeft) || !this.isValid(dateRight)) {\r\n return false;\r\n }\r\n\r\n return dateLeft === dateRight;\r\n }\r\n\r\n public isSameDay(dateLeft: number, dateRight: number): boolean {\r\n if (!this.isValid(dateLeft) || !this.isValid(dateRight)) {\r\n return false;\r\n }\r\n\r\n return this.fromTimestamp(dateLeft).hasSame(\r\n this.fromTimestamp(dateRight),\r\n 'day',\r\n );\r\n }\r\n\r\n public isValid(date: number): boolean {\r\n return typeof date === 'number' && Number.isFinite(date) && this.fromTimestamp(date).isValid;\r\n }\r\n\r\n public invalid(): number {\r\n return NaN;\r\n }\r\n\r\n public isDateInstance(obj: unknown): boolean {\r\n return typeof obj === 'number';\r\n }\r\n\r\n public addCalendarYears(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .plus({ years: Number(amount) })\r\n .toMillis();\r\n }\r\n\r\n public addCalendarMonths(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .plus({ months: Number(amount) })\r\n .toMillis();\r\n }\r\n\r\n public addCalendarDays(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .plus({ days: Number(amount) })\r\n .toMillis();\r\n }\r\n\r\n public setHours(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .set({ hour: amount })\r\n .toMillis();\r\n }\r\n\r\n public setMinutes(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .set({ minute: amount })\r\n .toMillis();\r\n }\r\n\r\n public setSeconds(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .set({ second: amount })\r\n .toMillis();\r\n }\r\n\r\n public createDate(\r\n year: number,\r\n month: number,\r\n date: number,\r\n hours = 0,\r\n minutes = 0,\r\n seconds = 0,\r\n ): number {\r\n if (hours < 0 || hours > 23) {\r\n throw Error(`UnixTimestampDateTimeAdapter: Invalid hours \"${hours}\". Hours must be between 0 and 23.`);\r\n }\r\n\r\n const result = DateTime.local(\r\n year,\r\n month + 1,\r\n date,\r\n hours,\r\n minutes,\r\n seconds,\r\n 0,\r\n ).setLocale(this.locale);\r\n\r\n if (!result.isValid) {\r\n throw Error(\r\n `UnixTimestampDateTimeAdapter: Invalid date \"${date}\" for month with index \"${month}\".`,\r\n );\r\n }\r\n\r\n return result.toMillis();\r\n }\r\n\r\n public clone(date: number): number {\r\n return date;\r\n }\r\n\r\n public now(): number {\r\n return DateTime.local()\r\n .setLocale(this.locale)\r\n .toMillis();\r\n }\r\n\r\n /**\r\n * Форматирование с поддержкой двух видов формата:\r\n * - string => формат Luxon, например 'dd.MM.yyyy HH:mm'\r\n * - Intl.DateTimeFormatOptions => форматирование, совместимое с прежним адаптером\r\n */\r\n public format(\r\n date: number,\r\n displayFormat: string | Intl.DateTimeFormatOptions,\r\n ): string {\r\n if (!this.isValid(date)) {\r\n throw Error('UnixTimestampDateTimeAdapter: Cannot format invalid date.');\r\n }\r\n\r\n const dt = this.fromTimestamp(date);\r\n\r\n if (typeof displayFormat === 'string') {\r\n return dt.toFormat(displayFormat);\r\n }\r\n\r\n return this.stripDirectionalityCharacters(\r\n dt.toJSDate().toLocaleDateString(this.locale, displayFormat),\r\n );\r\n }\r\n\r\n public parse(value: unknown, parseFormat: string | string[] | null): number | null {\r\n if (value == null || value === '') {\r\n return null;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return this.isValid(value) ? value : this.invalid();\r\n }\r\n\r\n if (value instanceof Date) {\r\n const date = DateTime.fromJSDate(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date.toMillis() : this.invalid();\r\n }\r\n\r\n if (DateTime.isDateTime(value)) {\r\n return value.isValid\r\n ? value.setLocale(this.locale).toMillis()\r\n : this.invalid();\r\n }\r\n\r\n if (typeof value !== 'string') {\r\n return this.invalid();\r\n }\r\n\r\n if (parseFormat) {\r\n const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];\r\n\r\n for (const format of formats) {\r\n if (typeof format !== 'string') {\r\n continue;\r\n }\r\n\r\n const parsed = DateTime.fromFormat(value, format, {\r\n locale: this.locale,\r\n });\r\n\r\n if (parsed.isValid) {\r\n return parsed.toMillis();\r\n }\r\n }\r\n }\r\n\r\n const iso = DateTime.fromISO(value, {\r\n locale: this.locale,\r\n });\r\n\r\n if (iso.isValid) {\r\n return iso.toMillis();\r\n }\r\n\r\n const jsDate = DateTime.fromJSDate(new Date(value)).setLocale(this.locale);\r\n\r\n return jsDate.isValid ? jsDate.toMillis() : this.invalid();\r\n }\r\n\r\n public override deserialize(value: unknown): number | null {\r\n if (value == null || value === '') {\r\n return null;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return this.isValid(value) ? value : this.invalid();\r\n }\r\n\r\n if (value instanceof Date) {\r\n const date = DateTime.fromJSDate(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date.toMillis() : this.invalid();\r\n }\r\n\r\n if (DateTime.isDateTime(value)) {\r\n return value.isValid\r\n ? value.setLocale(this.locale).toMillis()\r\n : this.invalid();\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const date = DateTime.fromISO(value, {\r\n locale: this.locale,\r\n });\r\n\r\n return date.isValid ? date.toMillis() : this.invalid();\r\n }\r\n\r\n return this.invalid();\r\n }\r\n\r\n public override setLocale(locale: string): void {\r\n super.setLocale(locale || 'ru');\r\n }\r\n\r\n private fromTimestamp(timestamp: number): DateTime {\r\n return DateTime.fromMillis(timestamp).setLocale(this.locale);\r\n }\r\n\r\n private stripDirectionalityCharacters(value: string): string {\r\n return value.replace(/[\\u200e\\u200f]/g, '');\r\n }\r\n}\r\n","/**\r\n * unix-timestamp-date-time-format.class\r\n */\r\nimport {OwlDateTimeFormats} from '../date-time-format.class';\r\n\r\nexport const OWL_UNIX_TIMESTAMP_DATE_TIME_FORMATS: OwlDateTimeFormats = {\r\n parseInput: null,\r\n fullPickerInput: {year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric'},\r\n datePickerInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\r\n timePickerInput: {hour: 'numeric', minute: 'numeric'},\r\n monthYearLabel: {year: 'numeric', month: 'short'},\r\n dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\r\n monthYearA11yLabel: {year: 'numeric', month: 'long'},\r\n};\r\n","/**\r\n * picker\r\n */\r\n\r\nexport { OwlDateTimeModule } from './lib/date-time/date-time.module';\r\n\r\nexport { OwlDateTimeIntl } from './lib/date-time/date-time-picker-intl.service';\r\n\r\nexport { OwlLuxonDateTimeModule } from './lib/date-time/adapter/luxon-date-time.module';\r\n\r\nexport {\r\n OWL_DATE_TIME_LOCALE_PROVIDER,\r\n OWL_DATE_TIME_LOCALE,\r\n DateTimeAdapter,\r\n\r\n} from './lib/date-time/adapter/date-time-adapter.class';\r\n\r\nexport { OWL_DATE_TIME_FORMATS, OwlDateTimeFormats } from './lib/date-time/adapter/date-time-format.class';\r\n\r\nexport {\r\n UnixTimestampDateTimeAdapter\r\n} from './lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class';\r\n\r\nexport { OWL_UNIX_TIMESTAMP_DATE_TIME_FORMATS } from './lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class';\r\n\r\nexport { OwlDateTimeInlineComponent } from './lib/date-time/date-time-inline.component';\r\n\r\nexport { OwlDateTimeComponent } from './lib/date-time/date-time-picker.component';\r\n\r\nexport * from './lib/date-time/calendar-body.component';\r\n\r\nexport * from './lib/date-time/timer.component';\r\n\r\nexport * from './lib/date-time/date-time-picker-trigger.directive';\r\n\r\nexport * from './lib/date-time/date-time-picker-input.directive';\r\n\r\nexport * from './lib/date-time/calendar-multi-year-view.component';\r\n\r\nexport * from './lib/date-time/adapter/luxon-date-time-adapter.class';\r\n\r\nexport * from './lib/date-time/adapter/luxon-date-time-format.class';\r\n\r\nexport * from './lib/date-time/adapter/luxon-date-time.module';\r\n\r\nexport * from './lib/date-time/calendar-year-view.component';\r\n\r\nexport * from './lib/date-time/calendar-month-view.component';\r\n\r\nexport * from './lib/date-time/calendar.component';\r\n\r\nexport * from './lib/date-time/timer.component';\r\n\r\nexport * from './lib/date-time/options-provider';\r\n\r\nexport { PickerType, PickerMode, SelectMode, DateView, DateViewType } from './lib/date-time/date-time.class'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i1.OwlDateTimeIntl","i2.DateTimeAdapter","i3.OwlCalendarBodyComponent","i2.OwlCalendarBodyComponent","i3","i4.OwlMultiYearViewComponent","i5.OwlYearViewComponent","i6.OwlMonthViewComponent","i3.OwlTimerBoxComponent","i4","i5.OwlTimerComponent","i6.OwlCalendarComponent","i2","take","filter","i2.OwlDialogService","i3.DateTimeAdapter","OWL_DATETIME_VALUE_ACCESSOR","i2.OwlDateTimeContainerComponent"],"mappings":"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"}
1
+ {"version":3,"file":"imihai-angular-datetime-picker.mjs","names":[],"sources":["../../../projects/picker/src/lib/date-time/date-time-picker-trigger.directive.ts","../../../projects/picker/src/lib/date-time/adapter/date-time-format.class.ts","../../../projects/picker/src/lib/date-time/adapter/date-time-adapter.class.ts","../../../projects/picker/src/lib/date-time/date-time.class.ts","../../../projects/picker/src/lib/date-time/date-time-picker-intl.service.ts","../../../projects/picker/src/lib/date-time/calendar-body.component.ts","../../../projects/picker/src/lib/date-time/calendar-body.component.html","../../../projects/picker/src/lib/date-time/options-provider.ts","../../../projects/picker/src/lib/date-time/calendar-multi-year-view.component.ts","../../../projects/picker/src/lib/date-time/calendar-multi-year-view.component.html","../../../projects/picker/src/lib/date-time/calendar-year-view.component.ts","../../../projects/picker/src/lib/date-time/calendar-year-view.component.html","../../../projects/picker/src/lib/date-time/calendar-month-view.component.ts","../../../projects/picker/src/lib/date-time/calendar-month-view.component.html","../../../projects/picker/src/lib/date-time/calendar.component.ts","../../../projects/picker/src/lib/date-time/calendar.component.html","../../../projects/picker/src/lib/date-time/timer-box.component.ts","../../../projects/picker/src/lib/date-time/timer-box.component.html","../../../projects/picker/src/lib/date-time/timer.component.ts","../../../projects/picker/src/lib/date-time/timer.component.html","../../../projects/picker/src/lib/date-time/date-time-picker-container.component.ts","../../../projects/picker/src/lib/date-time/date-time-picker-container.component.html","../../../projects/picker/src/lib/dialog/dialog-config.class.ts","../../../projects/picker/src/lib/dialog/dialog-ref.class.ts","../../../projects/picker/src/lib/dialog/dialog-container.component.ts","../../../projects/picker/src/lib/dialog/dialog-container.component.html","../../../projects/picker/src/lib/utils/object.utils.ts","../../../projects/picker/src/lib/dialog/dialog.service.ts","../../../projects/picker/src/lib/date-time/date-time-picker.component.ts","../../../projects/picker/src/lib/date-time/date-time-picker.component.html","../../../projects/picker/src/lib/date-time/date-time-picker-input.directive.ts","../../../projects/picker/src/lib/date-time/numberedFixLen.pipe.ts","../../../projects/picker/src/lib/date-time/date-time-inline.component.ts","../../../projects/picker/src/lib/date-time/date-time-inline.component.html","../../../projects/picker/src/lib/dialog/dialog.module.ts","../../../projects/picker/src/lib/date-time/date-time.module.ts","../../../projects/picker/src/lib/date-time/adapter/luxon-date-time-adapter.class.ts","../../../projects/picker/src/lib/date-time/adapter/luxon-date-time-format.class.ts","../../../projects/picker/src/lib/date-time/adapter/luxon-date-time.module.ts","../../../projects/picker/src/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-adapter.class.ts","../../../projects/picker/src/lib/date-time/adapter/unix-timestamp-adapter/unix-timestamp-date-time-format.class.ts"],"sourcesContent":["/**\r\n * date-time-picker-trigger.directive\r\n */\r\n\r\n\r\nimport { AfterContentInit, ChangeDetectorRef, Directive, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\r\nimport { OwlDateTimeComponent } from './date-time-picker.component';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { EMPTY, merge, Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[owlDateTimeTrigger]',\r\n standalone: false,\r\n host: {\r\n '(click)': 'handleClickOnHost($event)',\r\n '[class.owl-dt-trigger-disabled]': 'owlDTTriggerDisabledClass'\r\n }\r\n})\r\nexport class OwlDateTimeTriggerDirective<T> implements OnInit, OnChanges, AfterContentInit, OnDestroy {\r\n\r\n @Input('owlDateTimeTrigger') dtPicker: OwlDateTimeComponent<T>;\r\n\r\n private _disabled: boolean;\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled === undefined ? !!this.dtPicker?.disabled : !!this._disabled;\r\n }\r\n\r\n set disabled( value: boolean ) {\r\n this._disabled = coerceBooleanProperty(value);\r\n }\r\n\r\n get owlDTTriggerDisabledClass(): boolean {\r\n return this.disabled;\r\n }\r\n\r\n private stateChanges = Subscription.EMPTY;\r\n\r\n constructor( protected changeDetector: ChangeDetectorRef ) {\r\n }\r\n\r\n public ngOnInit(): void {\r\n }\r\n\r\n public ngOnChanges( changes: SimpleChanges ) {\r\n if (changes.dtPicker) {\r\n this.watchStateChanges();\r\n }\r\n }\r\n\r\n public ngAfterContentInit() {\r\n this.watchStateChanges();\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.stateChanges.unsubscribe();\r\n }\r\n\r\n public handleClickOnHost( event: Event ): void {\r\n if (this.dtPicker && !this.disabled) {\r\n this.dtPicker.open();\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n private watchStateChanges(): void {\r\n this.stateChanges.unsubscribe();\r\n\r\n const inputDisabled = this.dtPicker && this.dtPicker.dtInput ?\r\n this.dtPicker.dtInput.disabledChange.asObservable() : EMPTY;\r\n\r\n const pickerDisabled = this.dtPicker ?\r\n this.dtPicker.disabledChange.asObservable() : EMPTY;\r\n\r\n this.stateChanges = merge(pickerDisabled, inputDisabled)\r\n .subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n}\r\n","/**\r\n * date-time-format.class\r\n */\r\n\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport interface OwlDateTimeFormats {\r\n parseInput: any;\r\n fullPickerInput: any;\r\n datePickerInput: any;\r\n timePickerInput: any;\r\n monthYearLabel: any;\r\n dateA11yLabel: any;\r\n monthYearA11yLabel: any;\r\n}\r\n\r\n/** InjectionToken для переопределения формата даты и времени */\r\nexport const OWL_DATE_TIME_FORMATS = new InjectionToken<OwlDateTimeFormats>('OWL_DATE_TIME_FORMATS');\r\n","/**\r\n * date-time-adapter.class\r\n */\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { inject, InjectionToken, LOCALE_ID } from '@angular/core';\r\n\r\n/** InjectionToken для переопределения локали компонента выбора даты и времени */\r\nexport const OWL_DATE_TIME_LOCALE = new InjectionToken<string>(\r\n 'OWL_DATE_TIME_LOCALE',\r\n {\r\n providedIn: 'root',\r\n factory: OWL_DATE_TIME_LOCALE_FACTORY\r\n }\r\n);\r\n\r\n/** @docs-private */\r\nexport function OWL_DATE_TIME_LOCALE_FACTORY(): string {\r\n return inject(LOCALE_ID);\r\n}\r\n\r\n/** Провайдер токена OWL_DATE_TIME_LOCALE */\r\nexport const OWL_DATE_TIME_LOCALE_PROVIDER = {\r\n provide: OWL_DATE_TIME_LOCALE,\r\n useExisting: LOCALE_ID\r\n};\r\n\r\nexport abstract class DateTimeAdapter<T> {\r\n /** Локаль для всех дат */\r\n protected locale: any;\r\n\r\n /** Поток уведомлений об изменении локали */\r\n protected _localeChanges = new Subject<string>();\r\n get localeChanges(): Observable<string> {\r\n return this._localeChanges;\r\n }\r\n\r\n\tpublic firstMonthOfTheYear: number = 0;\r\n\tpublic firstDayOfTheWeek: number = 0;\r\n\r\n /** Количество миллисекунд в сутках */\r\n protected readonly millisecondsInDay = 86400000;\r\n\r\n /** Количество миллисекунд в минуте */\r\n protected readonly millisecondsInMinute = 60000;\r\n\r\n /**\r\n * Возвращает год указанной даты\r\n */\r\n abstract getYear(date: T): number;\r\n\r\n /**\r\n * Возвращает индекс месяца указанной даты\r\n * 0 -- январь\r\n * 11 -- декабрь\r\n * */\r\n abstract getMonth(date: T): number;\r\n\r\n /**\r\n * Возвращает день недели указанной даты\r\n * 0 -- воскресенье\r\n * 6 -- суббота\r\n * */\r\n abstract getDay(date: T): number;\r\n\r\n /**\r\n * Возвращает число месяца указанной даты\r\n */\r\n abstract getDate(date: T): number;\r\n\r\n /**\r\n * Возвращает часы указанной даты\r\n */\r\n abstract getHours(date: T): number;\r\n\r\n /**\r\n * Возвращает минуты указанной даты\r\n */\r\n abstract getMinutes(date: T): number;\r\n\r\n /**\r\n * Возвращает секунды указанной даты\r\n */\r\n abstract getSeconds(date: T): number;\r\n\r\n /**\r\n * Возвращает временную метку указанной даты в миллисекундах\r\n */\r\n abstract getTime(date: T): number;\r\n\r\n /**\r\n * Возвращает количество дней в месяце указанной даты\r\n */\r\n abstract getNumDaysInMonth(date: T): number;\r\n\r\n /**\r\n * Возвращает разницу между указанными датами в календарных днях\r\n * Если dateLeft раньше dateRight, возвращает отрицательное значение\r\n * Если dateLeft позже dateRight, возвращает положительное значение\r\n */\r\n abstract differenceInCalendarDays(dateLeft: T, dateRight: T): number;\r\n\r\n /**\r\n * Возвращает строковое представление года указанной даты\r\n */\r\n abstract getYearName(date: T): string;\r\n\r\n /**\r\n * Возвращает список названий месяцев\r\n */\r\n abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\r\n\r\n /**\r\n * Возвращает список названий дней недели\r\n */\r\n abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\r\n\r\n /**\r\n * Возвращает список строковых представлений чисел месяца\r\n */\r\n abstract getDateNames(): string[];\r\n\r\n /**\r\n * Возвращает дату в виде строки по стандарту ISO\r\n */\r\n abstract toIso8601(date: T): string;\r\n\r\n /**\r\n * Проверяет равенство указанных дат\r\n */\r\n abstract isEqual(dateLeft: T, dateRight: T): boolean;\r\n\r\n /**\r\n * Проверяет, относятся ли указанные даты к одному дню\r\n */\r\n abstract isSameDay(dateLeft: T, dateRight: T): boolean;\r\n\r\n /**\r\n * Проверяет корректность указанной даты\r\n */\r\n abstract isValid(date: T): boolean;\r\n\r\n /**\r\n * Возвращает экземпляр некорректной даты\r\n */\r\n abstract invalid(): T;\r\n\r\n /**\r\n * Проверяет, считает ли этот DateTimeAdapter указанный объект экземпляром даты\r\n */\r\n abstract isDateInstance(obj: any): boolean;\r\n\r\n /**\r\n * Добавляет указанное количество лет к дате\r\n */\r\n abstract addCalendarYears(date: T, amount: number): T;\r\n\r\n /**\r\n * Добавляет указанное количество месяцев к дате\r\n */\r\n abstract addCalendarMonths(date: T, amount: number): T;\r\n\r\n /**\r\n * Добавляет указанное количество дней к дате\r\n */\r\n abstract addCalendarDays(date: T, amount: number): T;\r\n\r\n /**\r\n * Устанавливает часы указанной даты\r\n */\r\n abstract setHours(date: T, amount: number): T;\r\n\r\n /**\r\n * Устанавливает минуты указанной даты\r\n */\r\n abstract setMinutes(date: T, amount: number): T;\r\n\r\n /**\r\n * Устанавливает секунды указанной даты\r\n */\r\n abstract setSeconds(date: T, amount: number): T;\r\n\r\n /**\r\n * Создаёт дату с указанными годом, месяцем, числом, часами, минутами и секундами\r\n * Месяц и число должны находиться в допустимых пределах\r\n */\r\n abstract createDate(year: number, month: number, date: number): T;\r\n abstract createDate(\r\n year: number,\r\n month: number,\r\n date: number,\r\n hours: number,\r\n minutes: number,\r\n seconds: number\r\n ): T;\r\n\r\n /**\r\n * Создаёт копию указанной даты\r\n */\r\n abstract clone(date: T): T;\r\n\r\n /**\r\n * Возвращает текущие дату и время\r\n * */\r\n abstract now(): T;\r\n\r\n /**\r\n * Форматирует дату в строку по указанному формату\r\n */\r\n abstract format(date: T, displayFormat: any): string;\r\n\r\n /**\r\n * Преобразует введённое пользователем значение в объект даты\r\n */\r\n abstract parse(value: any, parseFormat: any): T | null;\r\n\r\n /**\r\n * Сравнивает две указанные даты\r\n * 1, если первая дата позже второй;\r\n * -1, если первая дата раньше второй;\r\n * 0, если даты равны\r\n * */\r\n compare(first: T, second: T): number {\r\n if (!this.isValid(first) || !this.isValid(second)) {\r\n throw Error('JSNativeDate: Cannot compare invalid dates.');\r\n }\r\n\r\n const dateFirst = this.clone(first);\r\n const dateSecond = this.clone(second);\r\n\r\n const diff = this.getTime(dateFirst) - this.getTime(dateSecond);\r\n\r\n if (diff < 0) {\r\n return -1;\r\n } else if (diff > 0) {\r\n return 1;\r\n } else {\r\n // Возвращает 0 при diff === 0 и NaN при diff === NaN\r\n return diff;\r\n }\r\n }\r\n\r\n /**\r\n * Сравнивает годы двух указанных дат\r\n * 1, если год первой даты больше года второй;\r\n * -1, если год первой даты меньше года второй;\r\n * 0, если обе даты относятся к одному году\r\n * */\r\n compareYear(first: T, second: T): number {\r\n if (!this.isValid(first) || !this.isValid(second)) {\r\n throw Error('JSNativeDate: Cannot compare invalid dates.');\r\n }\r\n\r\n const yearLeft = this.getYear(first);\r\n const yearRight = this.getYear(second);\r\n\r\n const diff = yearLeft - yearRight;\r\n\r\n if (diff < 0) {\r\n return -1;\r\n } else if (diff > 0) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n /**\r\n * Пытается десериализовать значение в корректный объект даты\r\n * В отличие от разбора\r\n * пользовательского ввода, deserialize принимает только однозначные форматы, не зависящие\r\n * от локали, например ISO 8601\r\n * По умолчанию метод ничего не преобразует, а проверяет,\r\n * что значение уже является корректным объектом даты или null\r\n * Компонент выбора даты\r\n * использует этот метод для входных значений, представляющих даты\r\n * Переопределение\r\n * метода позволяет передавать в такие свойства значения прямо с сервера,\r\n * если реализовать десериализацию формата, используемого сервером\r\n */\r\n deserialize(value: any): T | null {\r\n if (\r\n value == null ||\r\n (this.isDateInstance(value) && this.isValid(value))\r\n ) {\r\n return value;\r\n }\r\n return this.invalid();\r\n }\r\n\r\n /**\r\n * Устанавливает локаль для всех дат\r\n */\r\n setLocale(locale: string) {\r\n this.locale = locale;\r\n this._localeChanges.next(locale);\r\n }\r\n\r\n /**\r\n * Возвращает локаль для всех дат\r\n * */\r\n getLocale() {\r\n return this.locale;\r\n }\r\n\r\n /**\r\n * Ограничивает дату минимальным и максимальным значениями\r\n */\r\n clampDate(date: T, min?: T | null, max?: T | null): T {\r\n if (min != null && this.compare(date, min) < 0) {\r\n return min;\r\n }\r\n if (max != null && this.compare(date, max) > 0) {\r\n return max;\r\n }\r\n return date;\r\n }\r\n}\r\n","/**\r\n * date-time.class\r\n */\r\nimport { Directive, EventEmitter, Inject, Input, Optional } from '@angular/core';\r\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { OWL_DATE_TIME_FORMATS, OwlDateTimeFormats } from './adapter/date-time-format.class';\r\n\r\nlet nextUniqueId = 0;\r\n\r\nexport type PickerType = 'both' | 'calendar' | 'timer';\r\n\r\nexport type PickerMode = 'popup' | 'dialog' | 'inline';\r\n\r\nexport type SelectMode = 'single' | 'range' | 'rangeFrom' | 'rangeTo';\r\n\r\nexport enum DateView {\r\n MONTH = 'month',\r\n YEAR = 'year',\r\n MULTI_YEARS = 'multi-years'\r\n}\r\n\r\nexport type DateViewType = DateView.MONTH | DateView.YEAR | DateView.MULTI_YEARS;\r\n\r\n@Directive()\r\nexport abstract class OwlDateTime<T> {\r\n /**\r\n * Начальное представление календаря\r\n */\r\n @Input()\r\n startView: DateViewType = DateView.MONTH;\r\n @Input()\r\n get showSecondsTimer(): boolean {\r\n return this._showSecondsTimer;\r\n }\r\n\r\n set showSecondsTimer(val: boolean) {\r\n this._showSecondsTimer = coerceBooleanProperty(val);\r\n }\r\n /**\r\n * Нужно ли показывать номера недель в календаре\r\n * */\r\n @Input()\r\n showCalendarWeeks = false;\r\n @Input()\r\n get hour12Timer(): boolean {\r\n return this._hour12Timer;\r\n }\r\n\r\n set hour12Timer(val: boolean) {\r\n this._hour12Timer = coerceBooleanProperty(val);\r\n }\r\n /**\r\n * Нужно ли показывать только представления года и нескольких лет\r\n */\r\n @Input()\r\n yearOnly = false;\r\n /**\r\n * Нужно ли показывать только представление нескольких лет\r\n */\r\n @Input()\r\n multiyearOnly = false;\r\n /**\r\n * Нужно ли показывать поле секунд\r\n */\r\n private _showSecondsTimer = false;\r\n /**\r\n * Используется ли 12-часовой формат времени\r\n */\r\n private _hour12Timer = false;\r\n /**\r\n * Количество часов за один шаг\r\n */\r\n private _stepHour = 1;\r\n @Input()\r\n get stepHour(): number {\r\n return this._stepHour;\r\n }\r\n\r\n set stepHour(val: number) {\r\n this._stepHour = coerceNumberProperty(val, 1);\r\n }\r\n\r\n /**\r\n * Количество минут за один шаг\r\n */\r\n private _stepMinute = 1;\r\n @Input()\r\n get stepMinute(): number {\r\n return this._stepMinute;\r\n }\r\n\r\n set stepMinute(val: number) {\r\n this._stepMinute = coerceNumberProperty(val, 1);\r\n }\r\n\r\n /**\r\n * Количество секунд за один шаг\r\n */\r\n private _stepSecond = 1;\r\n @Input()\r\n get stepSecond(): number {\r\n return this._stepSecond;\r\n }\r\n\r\n set stepSecond(val: number) {\r\n this._stepSecond = coerceNumberProperty(val, 1);\r\n }\r\n\r\n /**\r\n * Задаёт первый день недели\r\n */\r\n private _firstDayOfWeek: number;\r\n @Input()\r\n get firstDayOfWeek() {\r\n return this._firstDayOfWeek;\r\n }\r\n\r\n set firstDayOfWeek(value: number) {\r\n value = coerceNumberProperty(value);\r\n if (value > 6 || value < 0) {\r\n this._firstDayOfWeek = undefined;\r\n } else {\r\n this._firstDayOfWeek = value;\r\n }\r\n }\r\n\r\n /**\r\n * Нужно ли скрывать даты соседних месяцев в начале или конце текущего месяца\r\n */\r\n private _hideOtherMonths = false;\r\n @Input()\r\n get hideOtherMonths(): boolean {\r\n return this._hideOtherMonths;\r\n }\r\n\r\n set hideOtherMonths(val: boolean) {\r\n this._hideOtherMonths = coerceBooleanProperty(val);\r\n }\r\n\r\n private readonly _id: string;\r\n get id(): string {\r\n return this._id;\r\n }\r\n\r\n abstract get selected(): T | null;\r\n\r\n abstract get selecteds(): T[] | null;\r\n\r\n abstract get dateTimeFilter(): (date: T | null) => boolean;\r\n\r\n abstract get maxDateTime(): T | null;\r\n\r\n abstract get minDateTime(): T | null;\r\n\r\n abstract get selectMode(): SelectMode;\r\n\r\n abstract get startAt(): T | null;\r\n\r\n abstract get endAt(): T | null;\r\n\r\n abstract get opened(): boolean;\r\n\r\n abstract get pickerMode(): PickerMode;\r\n\r\n abstract get pickerType(): PickerType;\r\n\r\n abstract get isInSingleMode(): boolean;\r\n\r\n abstract get isInRangeMode(): boolean;\r\n\r\n abstract select(date: T | T[]): void;\r\n\r\n abstract yearSelected: EventEmitter<T>;\r\n\r\n abstract monthSelected: EventEmitter<T>;\r\n\r\n abstract dateSelected: EventEmitter<T>;\r\n\r\n abstract selectYear(normalizedYear: T): void;\r\n\r\n abstract selectMonth(normalizedMonth: T): void;\r\n\r\n abstract selectDate(normalizedDate: T): void;\r\n\r\n get formatString(): string {\r\n return this.pickerType === 'both'\r\n ? this.dateTimeFormats.fullPickerInput\r\n : this.pickerType === 'calendar'\r\n ? this.dateTimeFormats.datePickerInput\r\n : this.dateTimeFormats.timePickerInput;\r\n }\r\n\r\n /**\r\n * Проверка доступности указанных даты и времени для выбора\r\n */\r\n public dateTimeChecker = (dateTime: T) => {\r\n return (\r\n dateTime != null &&\r\n this.dateTimeAdapter.isValid(dateTime) &&\r\n (!this.dateTimeFilter || this.dateTimeFilter(dateTime)) &&\r\n (this.minDateTime == null ||\r\n this.dateTimeAdapter.compare(dateTime, this.minDateTime) >=\r\n 0) &&\r\n (this.maxDateTime == null ||\r\n this.dateTimeAdapter.compare(dateTime, this.maxDateTime) <= 0)\r\n );\r\n };\r\n\r\n get disabled(): boolean {\r\n return false;\r\n }\r\n\r\n protected constructor(\r\n @Optional() protected dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n protected dateTimeFormats: OwlDateTimeFormats\r\n ) {\r\n if (!this.dateTimeAdapter) {\r\n throw Error(\r\n `OwlDateTimePicker: No provider found for DateTimeAdapter. You must import ` +\r\n `OwlLuxonDateTimeModule at your application root or provide a custom implementation.`\r\n );\r\n }\r\n\r\n if (!this.dateTimeFormats) {\r\n throw Error(\r\n `OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import ` +\r\n `OwlLuxonDateTimeModule at your application root or provide custom formats.`\r\n );\r\n }\r\n\r\n this._id = `owl-dt-picker-${nextUniqueId++}`;\r\n }\r\n\r\n protected getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n}\r\n","/**\r\n * date-time-picker-intl.service\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class OwlDateTimeIntl {\r\n\r\n /**\r\n * Поток событий изменения подписей для уведомления\r\n * компонентов об изменении подписей после инициализации\r\n */\r\n readonly changes: Subject<void> = new Subject<void>();\r\n\r\n /** Подпись кнопки увеличения секунд для программ чтения с экрана */\r\n upSecondLabel = 'Add a second';\r\n\r\n /** Подпись кнопки уменьшения секунд для программ чтения с экрана */\r\n downSecondLabel = 'Minus a second';\r\n\r\n /** Подпись кнопки увеличения минут для программ чтения с экрана */\r\n upMinuteLabel = 'Add a minute';\r\n\r\n /** Подпись кнопки уменьшения минут для программ чтения с экрана */\r\n downMinuteLabel = 'Minus a minute';\r\n\r\n /** Подпись кнопки увеличения часов для программ чтения с экрана */\r\n upHourLabel = 'Add a hour';\r\n\r\n /** Подпись кнопки уменьшения часов для программ чтения с экрана */\r\n downHourLabel = 'Minus a hour';\r\n\r\n /** Подпись кнопки предыдущего месяца для программ чтения с экрана */\r\n prevMonthLabel = 'Previous month';\r\n\r\n /** Подпись кнопки следующего месяца для программ чтения с экрана */\r\n nextMonthLabel = 'Next month';\r\n\r\n /** Подпись кнопки предыдущего года для программ чтения с экрана */\r\n prevYearLabel = 'Previous year';\r\n\r\n /** Подпись кнопки следующего года для программ чтения с экрана */\r\n nextYearLabel = 'Next year';\r\n\r\n /** Подпись кнопки предыдущей группы лет для программ чтения с экрана */\r\n prevMultiYearLabel = 'Previous 21 years';\r\n\r\n /** Подпись кнопки следующей группы лет для программ чтения с экрана */\r\n nextMultiYearLabel = 'Next 21 years';\r\n\r\n /** Подпись кнопки перехода к представлению месяца для программ чтения с экрана */\r\n switchToMonthViewLabel = 'Change to month view';\r\n\r\n /** Подпись кнопки перехода к представлению года для программ чтения с экрана */\r\n switchToMultiYearViewLabel = 'Choose month and year';\r\n\r\n /** Подпись кнопки отмены */\r\n cancelBtnLabel = 'Cancel';\r\n\r\n /** Подпись кнопки подтверждения */\r\n setBtnLabel = 'Set';\r\n\r\n /** Подпись начала диапазона ('from') в информации о выбранных датах */\r\n rangeFromLabel = 'From';\r\n\r\n /** Подпись конца диапазона ('to') в информации о выбранных датах */\r\n rangeToLabel = 'To';\r\n\r\n /** Подпись кнопки AM в 12-часовом формате */\r\n hour12AMLabel = 'AM';\r\n\r\n /** Подпись кнопки PM в 12-часовом формате */\r\n hour12PMLabel = 'PM';\r\n}\r\n","/**\r\n * calendar-body.component\r\n */\r\n\r\nimport { afterNextRender, AfterRenderRef, ChangeDetectionStrategy, Component, DestroyRef, ElementRef, EventEmitter, inject, Injector, Input, NgZone, OnInit, Output } from '@angular/core';\r\nimport { SelectMode } from './date-time.class';\r\n\r\nexport class CalendarCell {\r\n constructor(\r\n public value: number,\r\n public displayValue: string,\r\n public ariaLabel: string,\r\n public enabled: boolean,\r\n public out: boolean = false,\r\n public cellClass: string = ''\r\n ) {}\r\n}\r\n\r\n@Component({\r\n selector: '[owl-date-time-calendar-body]',\r\n exportAs: 'owlDateTimeCalendarBody',\r\n templateUrl: './calendar-body.component.html',\r\n styleUrls: ['./calendar-body.component.scss'],\r\n host: {\r\n '[class.owl-dt-calendar-body]': 'owlDTCalendarBodyClass'\r\n },\r\n preserveWhitespaces: false,\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OwlCalendarBodyComponent implements OnInit {\r\n /**\r\n * Номер активной ячейки в таблице\r\n */\r\n @Input()\r\n activeCell = 0;\r\n /**\r\n * Ячейки, отображаемые в таблице\r\n * */\r\n @Input()\r\n rows: CalendarCell[][];\r\n /**\r\n * Количество столбцов в таблице\r\n * */\r\n @Input()\r\n numCols = 7;\r\n /**\r\n * Соотношение ширины и высоты ячеек таблицы\r\n */\r\n @Input()\r\n cellRatio = 1;\r\n /**\r\n * Значение в таблице, соответствующее сегодняшней дате\r\n * */\r\n @Input()\r\n todayValue: number;\r\n /**\r\n * Выбранное значение в таблице\r\n * */\r\n @Input()\r\n selectedValues: number[] = [];\r\n /**\r\n * Текущий режим выбора даты\r\n */\r\n @Input()\r\n selectMode: SelectMode;\r\n /**\r\n * Событие выбора ячейки календаря\r\n * */\r\n @Output()\r\n public readonly select = new EventEmitter<CalendarCell>();\r\n private readonly injector = inject(Injector);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private focusRef: AfterRenderRef | undefined;\r\n\r\n get owlDTCalendarBodyClass(): boolean {\r\n return true;\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this.selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom' ||\r\n this.selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n constructor(private elmRef: ElementRef<HTMLElement>, private ngZone: NgZone) {\r\n }\r\n\r\n public ngOnInit() {}\r\n\r\n public selectCell(cell: CalendarCell): void {\r\n if (cell.enabled) {\r\n this.select.emit(cell);\r\n }\r\n }\r\n\r\n public isActiveCell(rowIndex: number, colIndex: number): boolean {\r\n const cellNumber = rowIndex * this.numCols + colIndex;\r\n return cellNumber === this.activeCell;\r\n }\r\n\r\n /**\r\n * Проверяет, выбрана ли ячейка\r\n */\r\n public isSelected(value: number): boolean {\r\n if (!this.selectedValues || this.selectedValues.length === 0) {\r\n return false;\r\n }\r\n\r\n if (this.isInSingleMode) {\r\n return value === this.selectedValues[0];\r\n }\r\n\r\n if (this.isInRangeMode) {\r\n const fromValue = this.selectedValues?.[0];\r\n const toValue = this.selectedValues?.[1];\r\n\r\n return value === fromValue || value === toValue;\r\n }\r\n }\r\n\r\n /**\r\n * Проверяет, входит ли ячейка в диапазон\r\n * */\r\n public isInRange(value: number): boolean {\r\n if (this.isInRangeMode) {\r\n const fromValue = this.selectedValues?.[0];\r\n const toValue = this.selectedValues?.[1];\r\n\r\n if (fromValue != null && toValue != null) {\r\n return value >= fromValue && value <= toValue;\r\n } else {\r\n return value === fromValue || value === toValue;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Проверяет, соответствует ли ячейка началу диапазона\r\n * */\r\n public isRangeFrom(value: number): boolean {\r\n if (this.isInRangeMode) {\r\n const fromValue = this.selectedValues?.[0];\r\n return fromValue != null && value === fromValue;\r\n }\r\n }\r\n\r\n /**\r\n * Проверяет, соответствует ли ячейка концу диапазона\r\n * */\r\n public isRangeTo(value: number): boolean {\r\n if (this.isInRangeMode) {\r\n const toValue = this.selectedValues?.[1];\r\n return toValue != null && value === toValue;\r\n }\r\n }\r\n\r\n /**\r\n * Переводит фокус на активную ячейку\r\n * */\r\n public focusActiveCell(): void {\r\n if (this.destroyRef.destroyed) {\r\n return;\r\n }\r\n\r\n this.focusRef?.destroy();\r\n this.focusRef = afterNextRender({\r\n write: () => {\r\n this.focusRef = undefined;\r\n this.elmRef.nativeElement.querySelector<HTMLElement>('.owl-dt-calendar-cell-active')\r\n ?.focus();\r\n }\r\n }, { injector: this.injector });\r\n }\r\n}\r\n","@for (row of rows; track $index; let rowIndex = $index) {\r\n <tr role=\"row\">\r\n @for (item of row; track $index; let colIndex = $index) {\r\n <td\r\n class=\"owl-dt-calendar-cell {{ item.cellClass }}\"\r\n [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\r\n [class.owl-dt-calendar-cell-active]=\"\r\n isActiveCell(rowIndex, colIndex)\r\n \"\r\n [class.owl-dt-calendar-cell-disabled]=\"!item.enabled\"\r\n [class.owl-dt-calendar-cell-in-range]=\"isInRange(item.value)\"\r\n [class.owl-dt-calendar-cell-range-from]=\"\r\n isRangeFrom(item.value)\r\n \"\r\n [class.owl-dt-calendar-cell-range-to]=\"isRangeTo(item.value)\"\r\n [attr.aria-label]=\"item.ariaLabel\"\r\n [attr.aria-disabled]=\"!item.enabled || null\"\r\n [attr.aria-current]=\"item.value === todayValue ? 'date' : null\"\r\n [attr.aria-selected]=\"isSelected(item.value)\"\r\n [style.width.%]=\"100 / numCols\"\r\n [style.paddingTop.%]=\"(50 * cellRatio) / numCols\"\r\n [style.paddingBottom.%]=\"(50 * cellRatio) / numCols\"\r\n (click)=\"selectCell(item)\"\r\n >\r\n <span\r\n class=\"owl-dt-calendar-cell-content\"\r\n [ngClass]=\"{\r\n 'owl-dt-calendar-cell-out': item.out,\r\n 'owl-dt-calendar-cell-today': item.value === todayValue,\r\n 'owl-dt-calendar-cell-selected': isSelected(item.value),\r\n }\"\r\n >\r\n {{ item.displayValue }}\r\n </span>\r\n </td>\r\n }\r\n </tr>\r\n}\r\n","import { InjectionToken, Provider } from '@angular/core';\r\n\r\nexport function defaultOptionsFactory() {\r\n return DefaultOptions.create();\r\n\r\n}\r\nexport function multiYearOptionsFactory(options: Options) {\r\n return options.multiYear;\r\n }\r\n\r\nexport interface Options {\r\n multiYear: {\r\n yearsPerRow: number,\r\n yearRows: number\r\n };\r\n}\r\nexport class DefaultOptions {\r\n public static create(): Options {\r\n // Всегда возвращаем новый экземпляр\r\n return {\r\n multiYear: {\r\n yearRows: 7,\r\n yearsPerRow: 3\r\n }\r\n };\r\n }\r\n}\r\n\r\nexport abstract class OptionsTokens {\r\n public static all = new InjectionToken<Options>('All options token');\r\n public static multiYear = new InjectionToken<Options['multiYear']>('Grid view options token');\r\n}\r\n\r\nexport const optionsProviders: Provider[] = [\r\n {\r\n provide: OptionsTokens.all,\r\n useFactory: defaultOptionsFactory,\r\n },\r\n {\r\n provide: OptionsTokens.multiYear,\r\n useFactory: multiYearOptionsFactory,\r\n deps: [OptionsTokens.all],\r\n },\r\n];\r\n","/**\r\n * calendar-multi-year-view.component\r\n */\r\n\r\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnInit, Optional, Output, ViewChild } from '@angular/core';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';\r\nimport { SelectMode } from './date-time.class';\r\nimport { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\r\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\r\nimport { Options, OptionsTokens } from './options-provider';\r\n\r\n@Component({\r\n selector: 'owl-date-time-multi-year-view',\r\n templateUrl: './calendar-multi-year-view.component.html',\r\n styleUrls: ['./calendar-multi-year-view.component.scss'],\r\n host: {\r\n '[class.owl-dt-calendar-view]': 'owlDTCalendarView',\r\n '[class.owl-dt-calendar-multi-year-view]': 'owlDTCalendarMultiYearView'\r\n },\r\n standalone: false,\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\n\r\nexport class OwlMultiYearViewComponent<T> implements OnInit, AfterContentInit {\r\n\r\n /**\r\n * Обработчик выбора нового месяца\r\n * */\r\n @Output() readonly change = new EventEmitter<T>();\r\n @Input()\r\n get selectMode(): SelectMode {\r\n return this._selectMode;\r\n }\r\n\r\n set selectMode( val: SelectMode ) {\r\n this._selectMode = val;\r\n if (this.initiated) {\r\n this.setSelectedYears();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n /**\r\n * Передаёт выбранный год, не изменяя выбранную дату\r\n * */\r\n @Output() readonly yearSelected = new EventEmitter<T>();\r\n @Input()\r\n get selected(): T | null {\r\n return this._selected;\r\n }\r\n\r\n set selected( value: T | null ) {\r\n const oldSelected = this._selected;\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._selected = this.getValidDate(value);\r\n\r\n if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {\r\n this.setSelectedYears();\r\n }\r\n }\r\n\r\n private _selecteds: T[] = [];\r\n @Input()\r\n get selecteds(): T[] {\r\n return this._selecteds;\r\n }\r\n /** Событие активации любой даты */\r\n @Output() readonly pickerDateTimeChange: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n private _pickerDateTime: T | null;\r\n @Input()\r\n get pickerDateTime() {\r\n return this._pickerDateTime;\r\n }\r\n /** Событие выбора ячейки календаря клавишей Enter */\r\n @Output() readonly keyboardEnter: EventEmitter<any> = new EventEmitter<any>();\r\n /** Тело таблицы календаря */\r\n @ViewChild(OwlCalendarBodyComponent, { static: true }) calendarBodyElm: OwlCalendarBodyComponent;\r\n @Input()\r\n get dateFilter() {\r\n return this._dateFilter;\r\n }\r\n\r\n set dateFilter( filter: ( date: T ) => boolean ) {\r\n this._dateFilter = filter;\r\n if (this.initiated) {\r\n this.generateYearList();\r\n }\r\n }\r\n /**\r\n * Режим выбора даты\r\n * */\r\n private _selectMode: SelectMode = 'single';\r\n @Input()\r\n get minDate(): T | null {\r\n return this._minDate;\r\n }\r\n\r\n set minDate( value: T | null ) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._minDate = this.getValidDate(value);\r\n if (this.initiated) {\r\n this.generateYearList();\r\n }\r\n }\r\n /** Текущая выбранная дата */\r\n private _selected: T | null;\r\n @Input()\r\n get maxDate(): T | null {\r\n return this._maxDate;\r\n }\r\n\r\n set maxDate( value: T | null ) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._maxDate = this.getValidDate(value);\r\n if (this.initiated) {\r\n this.generateYearList();\r\n }\r\n }\r\n\r\n private _todayYear: number;\r\n get todayYear(): number {\r\n return this._todayYear;\r\n }\r\n\r\n private _years: CalendarCell[][];\r\n get years() {\r\n return this._years;\r\n }\r\n\r\n private _selectedYears: number[];\r\n get selectedYears(): number[] {\r\n return this._selectedYears;\r\n }\r\n\r\n private initiated = false;\r\n\r\n get isInSingleMode(): boolean {\r\n return this.selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return this.selectMode === 'range' || this.selectMode === 'rangeFrom'\r\n || this.selectMode === 'rangeTo';\r\n }\r\n /**\r\n * Функция, определяющая доступные для выбора даты\r\n * */\r\n private _dateFilter: ( date: T ) => boolean;\r\n\r\n get tableHeader(): string {\r\n if (this._years && this._years.length > 0) {\r\n return `${this._years[0][0].displayValue} - ${this._years[this.options.yearRows - 1][this.options.yearsPerRow - 1].displayValue}`;\r\n }\r\n }\r\n\r\n get prevButtonLabel(): string {\r\n return this.pickerIntl.prevMultiYearLabel;\r\n }\r\n\r\n get nextButtonLabel(): string {\r\n return this.pickerIntl.nextMultiYearLabel;\r\n }\r\n /** Минимальная доступная для выбора дата */\r\n private _minDate: T | null;\r\n /** Максимальная доступная для выбора дата */\r\n private _maxDate: T | null;\r\n\r\n constructor( private cdRef: ChangeDetectorRef,\r\n private pickerIntl: OwlDateTimeIntl,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\r\n @Inject(OptionsTokens.multiYear) public readonly options: Options['multiYear']\r\n ) {\r\n this.pickerIntl.changes.pipe(takeUntilDestroyed())\r\n .subscribe(() => this.cdRef.markForCheck());\r\n this.dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed())\r\n .subscribe(() => {\r\n this.generateYearList();\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n set selecteds( values: T[] ) {\r\n this._selecteds = (values ?? []).map((v) => {\r\n v = this.dateTimeAdapter.deserialize(v);\r\n return this.getValidDate(v);\r\n });\r\n this.setSelectedYears();\r\n }\r\n\r\n set pickerDateTime( value: T ) {\r\n const oldDateTime = this._pickerDateTime;\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._pickerDateTime = this.getValidDate(value) ?? this.dateTimeAdapter.now();\r\n\r\n if (oldDateTime != null && this._pickerDateTime != null &&\r\n !this.isSameYearList(oldDateTime, this._pickerDateTime)) {\r\n this.generateYearList();\r\n }\r\n }\r\n\r\n get owlDTCalendarView(): boolean {\r\n return true;\r\n }\r\n\r\n get owlDTCalendarMultiYearView(): boolean {\r\n return true;\r\n }\r\n\r\n get activeCell(): number {\r\n if (this._pickerDateTime != null) {\r\n return this.dateTimeAdapter.getYear(this._pickerDateTime) - this.getYearListStart(this._pickerDateTime);\r\n }\r\n }\r\n\r\n public ngOnInit() {\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this._todayYear = this.dateTimeAdapter.getYear(this.dateTimeAdapter.now());\r\n this.generateYearList();\r\n this.initiated = true;\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор ячейки календаря\r\n */\r\n public selectCalendarCell( cell: CalendarCell ): void {\r\n if (cell.enabled) {\r\n this.selectYear(cell.value);\r\n }\r\n }\r\n\r\n private selectYear( year: number ): void {\r\n this.yearSelected.emit(this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.firstMonthOfTheYear, 1));\r\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n year,\r\n this.dateTimeAdapter.getMonth(this.pickerDateTime),\r\n 1\r\n );\r\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth);\r\n const selected = this.dateTimeAdapter.createDate(\r\n year,\r\n this.dateTimeAdapter.getMonth(this.pickerDateTime),\r\n Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerDateTime)),\r\n this.dateTimeAdapter.getHours(this.pickerDateTime),\r\n this.dateTimeAdapter.getMinutes(this.pickerDateTime),\r\n this.dateTimeAdapter.getSeconds(this.pickerDateTime),\r\n );\r\n\r\n this.change.emit(selected);\r\n }\r\n\r\n /**\r\n * Создаёт список предыдущих лет\r\n * */\r\n public prevYearList( event: any ): void {\r\n this._pickerDateTime = this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, -1 * this.options.yearsPerRow * this.options.yearRows);\r\n this.generateYearList();\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Создаёт список следующих лет\r\n * */\r\n public nextYearList( event: any ): void {\r\n this._pickerDateTime = this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, this.options.yearsPerRow * this.options.yearRows);\r\n this.generateYearList();\r\n event.preventDefault();\r\n }\r\n\r\n public generateYearList(): void {\r\n if (this._pickerDateTime == null) {\r\n return;\r\n }\r\n\r\n this._years = [];\r\n\r\n const pickerDateTimeYear = this.dateTimeAdapter.getYear(this._pickerDateTime);\r\n const offset = pickerDateTimeYear - this.getYearListStart(this._pickerDateTime);\r\n\r\n for (let i = 0; i < this.options.yearRows; i++) {\r\n const row = [];\r\n\r\n for (let j = 0; j < this.options.yearsPerRow; j++) {\r\n const year = pickerDateTimeYear - offset + (j + i * this.options.yearsPerRow);\r\n const yearCell = this.createYearCell(year);\r\n row.push(yearCell);\r\n }\r\n\r\n this._years.push(row);\r\n }\r\n\r\n return;\r\n\r\n }\r\n\r\n /** Доступна ли кнопка перехода к предыдущему периоду */\r\n public previousEnabled(): boolean {\r\n return this.minDate == null || this.getYearListStart(this._pickerDateTime) >\r\n this.getYearListStart(this.minDate);\r\n }\r\n\r\n /** Доступна ли кнопка перехода к следующему периоду */\r\n public nextEnabled(): boolean {\r\n return this.maxDate == null || this.getYearListStart(this._pickerDateTime) <\r\n this.getYearListStart(this.maxDate);\r\n }\r\n\r\n public handleCalendarKeydown( event: KeyboardEvent ): void {\r\n let dateTime;\r\n switch (event.keyCode) {\r\n // На один год назад\r\n case LEFT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime, -1);\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один год вперёд\r\n case RIGHT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime, 1);\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На три года назад\r\n case UP_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime, -1 * this.options.yearsPerRow);\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На три года вперёд\r\n case DOWN_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime, this.options.yearsPerRow);\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К первому году на текущей странице\r\n case HOME:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime,\r\n -this.activeCell\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К последнему году на текущей странице\r\n case END:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this._pickerDateTime,\r\n (this.options.yearsPerRow * this.options.yearRows) - this.activeCell - 1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На одну страницу лет (или десять страниц) назад\r\n case PAGE_UP:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, event.altKey ? -10 * (this.options.yearsPerRow * this.options.yearRows) : -1 * (this.options.yearsPerRow * this.options.yearRows));\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На одну страницу лет (или десять страниц) вперёд\r\n case PAGE_DOWN:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, event.altKey ? 10 * (this.options.yearsPerRow * this.options.yearRows) : (this.options.yearsPerRow * this.options.yearRows));\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n case ENTER:\r\n if (this.isYearEnabled(this.dateTimeAdapter.getYear(this._pickerDateTime))) {\r\n this.selectYear(this.dateTimeAdapter.getYear(this._pickerDateTime));\r\n this.keyboardEnter.emit();\r\n }\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n this.focusActiveCell();\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Создаёт CalendarCell для указанного года\r\n */\r\n private createYearCell( year: number ): CalendarCell {\r\n const startDateOfYear = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.firstMonthOfTheYear, 1);\r\n const ariaLabel = this.dateTimeAdapter.getYearName(startDateOfYear);\r\n const cellClass = 'owl-dt-year-' + year;\r\n return new CalendarCell(year, year.toString(), ariaLabel, this.isYearEnabled(year), false, cellClass);\r\n }\r\n\r\n private setSelectedYears(): void {\r\n\r\n this._selectedYears = [];\r\n\r\n if (this.isInSingleMode && this.selected != null) {\r\n this._selectedYears[0] = this.dateTimeAdapter.getYear(this.selected);\r\n }\r\n\r\n if (this.isInRangeMode && this.selecteds) {\r\n this._selectedYears = this.selecteds.map(( selected ) => {\r\n if (this.dateTimeAdapter.isValid(selected)) {\r\n return this.dateTimeAdapter.getYear(selected);\r\n } else {\r\n return null;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** Доступен ли указанный год для выбора */\r\n private isYearEnabled( year: number ) {\r\n // Отключаем выбор года, если он позже maxDate или раньше minDate\r\n if (year === undefined || year === null ||\r\n (this.maxDate != null && year > this.dateTimeAdapter.getYear(this.maxDate)) ||\r\n (this.minDate != null && year < this.dateTimeAdapter.getYear(this.minDate))) {\r\n return false;\r\n }\r\n\r\n // Разрешаем выбор, если проверки пройдены и фильтр не задан\r\n if (!this.dateFilter) {\r\n return true;\r\n }\r\n\r\n const firstOfYear = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.firstMonthOfTheYear, 1);\r\n\r\n // Считаем год доступным для выбора, если доступна хотя бы одна дата в нём\r\n for (let date = firstOfYear; this.dateTimeAdapter.getYear(date) === year;\r\n date = this.dateTimeAdapter.addCalendarDays(date, 1)) {\r\n if (this.dateFilter(date) &&\r\n (this.minDate == null || this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\r\n (this.maxDate == null || this.dateTimeAdapter.compare(date, this.maxDate) <= 0)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isSameYearList( date1: T, date2: T ): boolean {\r\n return this.getYearListStart(date1) === this.getYearListStart(date2);\r\n }\r\n\r\n private getYearListStart(date: T): number {\r\n const yearsPerPage = this.options.yearsPerRow * this.options.yearRows;\r\n return Math.floor(this.dateTimeAdapter.getYear(date) / yearsPerPage) * yearsPerPage;\r\n }\r\n\r\n /**\r\n * Возвращает корректный объект даты\r\n */\r\n private getValidDate( obj: any ): T | null {\r\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj)) ? obj : null;\r\n }\r\n\r\n private focusActiveCell() {\r\n this.calendarBodyElm.focusActiveCell();\r\n }\r\n}\r\n","<button class=\"owl-dt-control-button owl-dt-control-arrow-button\"\r\n [disabled]=\"!previousEnabled()\" [attr.aria-label]=\"prevButtonLabel\"\r\n type=\"button\" tabindex=\"0\" (click)=\"prevYearList($event)\">\r\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG-стрелка влево\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\" xml:space=\"preserve\"\r\n width=\"100%\" height=\"100%\">\r\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\" d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\"/>\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n<table class=\"owl-dt-calendar-table owl-dt-calendar-multi-year-table\">\r\n <thead class=\"owl-dt-calendar-header\">\r\n <tr>\r\n <th [attr.colspan]=\"options.yearsPerRow\">{{ tableHeader }}</th>\r\n </tr>\r\n </thead>\r\n <tbody owl-date-time-calendar-body role=\"grid\"\r\n [rows]=\"years\" [numCols]=\"options.yearsPerRow\" [cellRatio]=\"3 / 7\"\r\n [activeCell]=\"activeCell\"\r\n [todayValue]=\"todayYear\"\r\n [selectedValues]=\"selectedYears\"\r\n [selectMode]=\"selectMode\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\"></tbody>\r\n</table>\r\n<button class=\"owl-dt-control-button owl-dt-control-arrow-button\"\r\n [disabled]=\"!nextEnabled()\" [attr.aria-label]=\"nextButtonLabel\"\r\n type=\"button\" tabindex=\"0\" (click)=\"nextYearList($event)\">\r\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG-стрелка вправо\"> -->\r\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\" style=\"enable-background:new 0 0 250.738 250.738;\" xml:space=\"preserve\">\r\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\" d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\r\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\r\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\r\n C197.237,120.447,195.534,115.448,191.75,111.689z\"/>\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n","/**\r\n * calendar-year-view.component\r\n */\r\n\r\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Optional, Output, ViewChild } from '@angular/core';\r\nimport { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { OWL_DATE_TIME_FORMATS, OwlDateTimeFormats } from './adapter/date-time-format.class';\r\nimport { Subscription } from 'rxjs';\r\nimport { SelectMode } from './date-time.class';\r\nimport { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\r\n\r\nconst MONTHS_PER_YEAR = 12;\r\nconst MONTHS_PER_ROW = 3;\r\n\r\n@Component({\r\n selector: 'owl-date-time-year-view',\r\n exportAs: 'owlMonthView',\r\n templateUrl: './calendar-year-view.component.html',\r\n styleUrls: ['./calendar-year-view.component.scss'],\r\n host: {\r\n '[class.owl-dt-calendar-view]': 'owlDTCalendarView'\r\n },\r\n standalone: false,\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OwlYearViewComponent<T>\r\n implements OnInit, AfterContentInit, OnDestroy {\r\n /**\r\n * Массив номеров месяцев из selectedDates\r\n * Значение — номер месяца в текущем году\r\n * */\r\n public selectedMonths: number[] = [];\r\n @Input()\r\n get selectMode(): SelectMode {\r\n return this._selectMode;\r\n }\r\n\r\n set selectMode(val: SelectMode) {\r\n this._selectMode = val;\r\n if (this.initiated) {\r\n this.generateMonthList();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n /**\r\n * Обработчик выбора нового месяца\r\n * */\r\n @Output()\r\n readonly change = new EventEmitter<T>();\r\n @Input()\r\n get selected(): T | null {\r\n return this._selected;\r\n }\r\n\r\n set selected(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._selected = this.getValidDate(value);\r\n this.setSelectedMonths();\r\n }\r\n\r\n private _selecteds: T[] = [];\r\n @Input()\r\n get selecteds(): T[] {\r\n return this._selecteds;\r\n }\r\n /**\r\n * Передаёт выбранный год, не изменяя выбранную дату\r\n * */\r\n @Output()\r\n readonly monthSelected = new EventEmitter<T>();\r\n\r\n private _pickerDateTime: T | null;\r\n @Input()\r\n get pickerDateTime() {\r\n return this._pickerDateTime;\r\n }\r\n /** Событие активации любой даты */\r\n @Output()\r\n readonly pickerDateTimeChange: EventEmitter<T> = new EventEmitter<T>();\r\n /** Событие выбора ячейки календаря клавишей Enter */\r\n @Output()\r\n readonly keyboardEnter: EventEmitter<any> = new EventEmitter<any>();\r\n @Input()\r\n get dateFilter() {\r\n return this._dateFilter;\r\n }\r\n\r\n set dateFilter(filter: (date: T) => boolean) {\r\n this._dateFilter = filter;\r\n if (this.initiated) {\r\n this.generateMonthList();\r\n }\r\n }\r\n /** Тело таблицы календаря */\r\n @ViewChild(OwlCalendarBodyComponent, { static: true })\r\n calendarBodyElm: OwlCalendarBodyComponent;\r\n @Input()\r\n get minDate(): T | null {\r\n return this._minDate;\r\n }\r\n\r\n set minDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._minDate = this.getValidDate(value);\r\n if (this.initiated) {\r\n this.generateMonthList();\r\n }\r\n }\r\n /**\r\n * Режим выбора даты\r\n * */\r\n private _selectMode: SelectMode = 'single';\r\n @Input()\r\n get maxDate(): T | null {\r\n return this._maxDate;\r\n }\r\n\r\n set maxDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._maxDate = this.getValidDate(value);\r\n if (this.initiated) {\r\n this.generateMonthList();\r\n }\r\n }\r\n /** Текущая выбранная дата */\r\n private _selected: T | null;\r\n\r\n private _months: CalendarCell[][];\r\n get months() {\r\n return this._months;\r\n }\r\n /**\r\n * Функция, определяющая доступные для выбора даты\r\n * */\r\n private _dateFilter: (date: T) => boolean;\r\n\r\n get isInSingleMode(): boolean {\r\n return this.selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom' ||\r\n this.selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n private localeSub: Subscription = Subscription.EMPTY;\r\n\r\n private initiated = false;\r\n\r\n public todayMonth: number | null;\r\n /** Минимальная доступная для выбора дата */\r\n private _minDate: T | null;\r\n /** Максимальная доступная для выбора дата */\r\n private _maxDate: T | null;\r\n private monthNames: string[];\r\n\r\n set selecteds(values: T[]) {\r\n this._selecteds = [];\r\n for (let i = 0; i < (values?.length ?? 0); i++) {\r\n const value = this.dateTimeAdapter.deserialize(values[i]);\r\n this._selecteds.push(this.getValidDate(value));\r\n }\r\n\r\n this.setSelectedMonths();\r\n }\r\n\r\n set pickerDateTime(value: T) {\r\n const oldDateTime = this._pickerDateTime;\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._pickerDateTime =\r\n this.getValidDate(value) ?? this.dateTimeAdapter.now();\r\n\r\n if (\r\n !this.hasSameYear(oldDateTime, this._pickerDateTime) &&\r\n this.initiated\r\n ) {\r\n this.generateMonthList();\r\n }\r\n }\r\n\r\n get activeCell(): number {\r\n if (this._pickerDateTime != null) {\r\n return this.dateTimeAdapter.getMonth(this._pickerDateTime);\r\n }\r\n }\r\n\r\n get owlDTCalendarView(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n private dateTimeFormats: OwlDateTimeFormats\r\n ) {\r\n this.monthNames = this.dateTimeAdapter.getMonthNames('short');\r\n }\r\n\r\n public ngOnInit() {\r\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(() => {\r\n this.monthNames = this.dateTimeAdapter.getMonthNames('short');\r\n this.generateMonthList();\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.generateMonthList();\r\n this.initiated = true;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.localeSub.unsubscribe();\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор ячейки календаря\r\n */\r\n public selectCalendarCell(cell: CalendarCell): void {\r\n if (cell.enabled) {\r\n this.selectMonth(cell.value);\r\n }\r\n }\r\n\r\n /**\r\n * Обрабатывает keydown в таблице календаря\r\n */\r\n public handleCalendarKeydown(event: KeyboardEvent): void {\r\n let dateTime;\r\n switch (event.keyCode) {\r\n // На один месяц назад\r\n case LEFT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n -1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один месяц вперёд\r\n case RIGHT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n 1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На три месяца назад\r\n case UP_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n -3\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На три месяца вперёд\r\n case DOWN_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n 3\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К первому месяцу текущего года\r\n case HOME:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n -this.dateTimeAdapter.getMonth(this.pickerDateTime)\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К последнему месяцу текущего года\r\n case END:\r\n dateTime = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n 11 - this.dateTimeAdapter.getMonth(this.pickerDateTime)\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один год (или десять лет) назад\r\n case PAGE_UP:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(\r\n this.pickerDateTime,\r\n event.altKey ? -10 : -1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один год (или десять лет) вперёд\r\n case PAGE_DOWN:\r\n dateTime = this.dateTimeAdapter.addCalendarYears(\r\n this.pickerDateTime,\r\n event.altKey ? 10 : 1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // Выбирает текущий месяц\r\n case ENTER:\r\n if (this.isMonthEnabled(this.dateTimeAdapter.getMonth(this.pickerDateTime))) {\r\n this.selectMonth(this.dateTimeAdapter.getMonth(this.pickerDateTime));\r\n this.keyboardEnter.emit();\r\n }\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this.focusActiveCell();\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор нового месяца\r\n */\r\n private selectMonth(month: number): void {\r\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerDateTime),\r\n month,\r\n 1\r\n );\r\n\r\n this.monthSelected.emit(firstDateOfMonth);\r\n\r\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(\r\n firstDateOfMonth\r\n );\r\n const result = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerDateTime),\r\n month,\r\n Math.min(\r\n daysInMonth,\r\n this.dateTimeAdapter.getDate(this.pickerDateTime)\r\n ),\r\n this.dateTimeAdapter.getHours(this.pickerDateTime),\r\n this.dateTimeAdapter.getMinutes(this.pickerDateTime),\r\n this.dateTimeAdapter.getSeconds(this.pickerDateTime)\r\n );\r\n\r\n this.change.emit(result);\r\n }\r\n\r\n /**\r\n * Создаёт список месяцев календаря\r\n * */\r\n private generateMonthList(): void {\r\n if (this.pickerDateTime == null) {\r\n return;\r\n }\r\n\r\n this.setSelectedMonths();\r\n this.todayMonth = this.getMonthInCurrentYear(\r\n this.dateTimeAdapter.now()\r\n );\r\n\r\n this._months = [];\r\n for (let i = 0; i < MONTHS_PER_YEAR / MONTHS_PER_ROW; i++) {\r\n const row = [];\r\n\r\n for (let j = 0; j < MONTHS_PER_ROW; j++) {\r\n const month = j + i * MONTHS_PER_ROW + this.dateTimeAdapter.firstMonthOfTheYear;\r\n const monthCell = this.createMonthCell(month);\r\n row.push(monthCell);\r\n }\r\n\r\n this._months.push(row);\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Создаёт CalendarCell для указанного месяца\r\n */\r\n private createMonthCell(month: number): CalendarCell {\r\n const startDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerDateTime),\r\n month,\r\n 1\r\n );\r\n const ariaLabel = this.dateTimeAdapter.format(\r\n startDateOfMonth,\r\n this.dateTimeFormats.monthYearA11yLabel\r\n );\r\n const cellClass = 'owl-dt-month-' + month;\r\n return new CalendarCell(\r\n month,\r\n this.monthNames[month-this.dateTimeAdapter.firstMonthOfTheYear],\r\n ariaLabel,\r\n this.isMonthEnabled(month),\r\n false,\r\n cellClass\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность указанного месяца для выбора\r\n */\r\n private isMonthEnabled(month: number): boolean {\r\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerDateTime),\r\n month,\r\n 1\r\n );\r\n\r\n // Если в месяце доступна для выбора хотя бы одна дата,\r\n // считаем месяц доступным для выбора\r\n for (\r\n let date = firstDateOfMonth;\r\n this.dateTimeAdapter.getMonth(date) === month;\r\n date = this.dateTimeAdapter.addCalendarDays(date, 1)\r\n ) {\r\n if (\r\n date != null &&\r\n (!this.dateFilter || this.dateFilter(date)) &&\r\n (this.minDate == null ||\r\n this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\r\n (this.maxDate == null ||\r\n this.dateTimeAdapter.compare(date, this.maxDate) <= 0)\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Возвращает месяц указанной даты в текущем году\r\n * Возвращает null, если указанная дата находится в другом году\r\n */\r\n private getMonthInCurrentYear(date: T | null): number {\r\n if (this.getValidDate(date) != null && this.getValidDate(this._pickerDateTime) != null) {\r\n const result = this.dateTimeAdapter.compareYear(\r\n date,\r\n this._pickerDateTime\r\n );\r\n\r\n // < 0: выбранная дата находится в предыдущем году, поэтому возвращаем -1\r\n // > 0: выбранная дата находится в следующем году, поэтому возвращаем 12\r\n // 0: оба значения находятся в одном году, поэтому возвращаем номер месяца\r\n if (result < 0) {\r\n return -1;\r\n } else if (result > 0) {\r\n return 12;\r\n } else {\r\n return this.dateTimeAdapter.getMonth(date);\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Задаёт значение selectedMonths\r\n * В режиме single содержит одно значение — месяц выбранной даты\r\n * В режиме range содержит два значения: месяц fromValue и месяц toValue\r\n * */\r\n private setSelectedMonths(): void {\r\n this.selectedMonths = [];\r\n if (this.isInSingleMode && this.selected != null) {\r\n this.selectedMonths[0] = this.getMonthInCurrentYear(this.selected);\r\n }\r\n\r\n if (this.isInRangeMode && this.selecteds) {\r\n this.selectedMonths[0] = this.getMonthInCurrentYear(\r\n this.selecteds[0]\r\n );\r\n this.selectedMonths[1] = this.getMonthInCurrentYear(\r\n this.selecteds[1]\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Проверяет, находятся ли указанные даты в одном году\r\n */\r\n private hasSameYear(dateLeft: T, dateRight: T) {\r\n return !!(\r\n dateLeft != null &&\r\n dateRight != null &&\r\n this.dateTimeAdapter.getYear(dateLeft) ===\r\n this.dateTimeAdapter.getYear(dateRight)\r\n );\r\n }\r\n\r\n /**\r\n * Возвращает корректный объект даты\r\n */\r\n private getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n\r\n private focusActiveCell() {\r\n this.calendarBodyElm.focusActiveCell();\r\n }\r\n}\r\n","<table class=\"owl-dt-calendar-table owl-dt-calendar-year-table\">\r\n <thead class=\"owl-dt-calendar-header\">\r\n <tr>\r\n <th class=\"owl-dt-calendar-table-divider\" aria-hidden=\"true\" colspan=\"3\"></th>\r\n </tr>\r\n </thead>\r\n <tbody owl-date-time-calendar-body role=\"grid\"\r\n [rows]=\"months\" [numCols]=\"3\" [cellRatio]=\"3 / 7\"\r\n [activeCell]=\"activeCell\"\r\n [todayValue]=\"todayMonth\"\r\n [selectedValues]=\"selectedMonths\"\r\n [selectMode]=\"selectMode\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\">\r\n </tbody>\r\n</table>\r\n","/**\r\n * calendar-month-view.component\r\n */\r\n\r\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Optional, Output, ViewChild } from '@angular/core';\r\nimport { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { OWL_DATE_TIME_FORMATS, OwlDateTimeFormats } from './adapter/date-time-format.class';\r\nimport { Subscription } from 'rxjs';\r\nimport { SelectMode } from './date-time.class';\r\nimport { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\r\nimport { getLocaleFirstDayOfWeek } from '@angular/common';\r\n\r\nconst DAYS_PER_WEEK = 7;\r\nconst WEEKS_PER_VIEW = 6;\r\n\r\n@Component({\r\n selector: 'owl-date-time-month-view',\r\n exportAs: 'owlYearView',\r\n templateUrl: './calendar-month-view.component.html',\r\n styleUrls: ['./calendar-month-view.component.scss'],\r\n standalone: false,\r\n host: {\r\n '[class.owl-dt-calendar-view]': 'owlDTCalendarView'\r\n },\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OwlMonthViewComponent<T>\r\n implements OnInit, AfterContentInit, OnDestroy {\r\n /**\r\n * Нужно ли скрывать даты соседних месяцев в начале или конце текущего месяца\r\n * */\r\n @Input()\r\n hideOtherMonths = false;\r\n\r\n /**\r\n * Нужно ли показывать номера недель в календаре\r\n * */\r\n @Input()\r\n showCalendarWeeks = false;\r\n\r\n private isDefaultFirstDayOfWeek = true;\r\n /**\r\n * Число месяца, соответствующее сегодняшней дате\r\n * */\r\n public todayDate: number | null;\r\n\r\n @Input()\r\n get firstDayOfWeek(): number {\r\n return this._firstDayOfWeek;\r\n }\r\n\r\n set firstDayOfWeek(val: number) {\r\n if (val >= 0 && val <= 6 && val !== this._firstDayOfWeek) {\r\n this._firstDayOfWeek = val;\r\n this.isDefaultFirstDayOfWeek = false;\r\n\r\n if (this.initiated) {\r\n this.generateWeekDays();\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n }\r\n /**\r\n * Номера дней недели\r\n * */\r\n public weekNumbers: number[];\r\n @Input()\r\n get selectMode(): SelectMode {\r\n return this._selectMode;\r\n }\r\n\r\n set selectMode(val: SelectMode) {\r\n this._selectMode = val;\r\n if (this.initiated) {\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n /**\r\n * Массив значений selectedDates\r\n * Значение — номер дня в текущем месяце\r\n * */\r\n public selectedDates: number[] = [];\r\n @Input()\r\n get selected(): T | null {\r\n return this._selected;\r\n }\r\n\r\n set selected(value: T | null) {\r\n const oldSelected = this._selected;\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._selected = this.getValidDate(value);\r\n\r\n if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {\r\n this.setSelectedDates();\r\n }\r\n }\r\n\r\n private _selecteds: T[] = [];\r\n @Input()\r\n get selecteds(): T[] {\r\n return this._selecteds;\r\n }\r\n // Индекс ячейки с первым днём месяца\r\n public firstRowOffset: number;\r\n\r\n private _pickerDateTime: T;\r\n @Input()\r\n get pickerDateTime() {\r\n return this._pickerDateTime;\r\n }\r\n /**\r\n * Обработчик выбора новой даты\r\n * */\r\n @Output()\r\n readonly selectedChange = new EventEmitter<T | null>();\r\n /**\r\n * Обработчик выбора любой даты\r\n * */\r\n @Output()\r\n readonly userSelection = new EventEmitter<void>();\r\n @Input()\r\n get dateFilter() {\r\n return this._dateFilter;\r\n }\r\n\r\n set dateFilter(filter: (date: T) => boolean) {\r\n this._dateFilter = filter;\r\n if (this.initiated) {\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n /** Событие активации любой даты */\r\n @Output()\r\n readonly pickerDateTimeChange: EventEmitter<T> = new EventEmitter<T>();\r\n @Input()\r\n get minDate(): T | null {\r\n return this._minDate;\r\n }\r\n\r\n set minDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._minDate = this.getValidDate(value);\r\n if (this.initiated) {\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n /** Тело таблицы календаря */\r\n @ViewChild(OwlCalendarBodyComponent, { static: true })\r\n calendarBodyElm: OwlCalendarBodyComponent;\r\n @Input()\r\n get maxDate(): T | null {\r\n return this._maxDate;\r\n }\r\n\r\n set maxDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._maxDate = this.getValidDate(value);\r\n\r\n if (this.initiated) {\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n private _weekdays: Array<{ long: string; short: string; narrow: string }>;\r\n get weekdays() {\r\n return this._weekdays;\r\n }\r\n\r\n private _days: CalendarCell[][];\r\n get days() {\r\n return this._days;\r\n }\r\n /**\r\n * Задаёт первый день недели\r\n * Воскресенье: 0 — суббота: 6\r\n * */\r\n private _firstDayOfWeek: number;\r\n\r\n get isInSingleMode(): boolean {\r\n return this.selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom' ||\r\n this.selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n private firstDateOfMonth: T;\r\n\r\n private localeSub: Subscription = Subscription.EMPTY;\r\n\r\n private initiated = false;\r\n\r\n private dateNames: string[];\r\n /**\r\n * Режим выбора даты\r\n * */\r\n private _selectMode: SelectMode = 'single';\r\n /** Текущая выбранная дата */\r\n private _selected: T | null;\r\n /**\r\n * Функция, определяющая доступные для выбора даты\r\n * */\r\n private _dateFilter: (date: T) => boolean;\r\n /** Минимальная доступная для выбора дата */\r\n private _minDate: T | null;\r\n /** Максимальная доступная для выбора дата */\r\n private _maxDate: T | null;\r\n\r\n set selecteds(values: T[]) {\r\n this._selecteds = (values ?? []).map(v => {\r\n v = this.dateTimeAdapter.deserialize(v);\r\n return this.getValidDate(v);\r\n });\r\n this.setSelectedDates();\r\n }\r\n\r\n set pickerDateTime(value: T) {\r\n const oldDateTime = this._pickerDateTime;\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._pickerDateTime =\r\n this.getValidDate(value) ?? this.dateTimeAdapter.now();\r\n\r\n this.firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this._pickerDateTime),\r\n this.dateTimeAdapter.getMonth(this._pickerDateTime),\r\n 1\r\n );\r\n\r\n if (\r\n !this.isSameMonth(oldDateTime, this._pickerDateTime) &&\r\n this.initiated\r\n ) {\r\n this.generateCalendar();\r\n }\r\n }\r\n\r\n get activeCell(): number {\r\n if (this.pickerDateTime != null) {\r\n return (\r\n this.dateTimeAdapter.getDate(this.pickerDateTime) +\r\n this.firstRowOffset -\r\n 1\r\n );\r\n }\r\n }\r\n\r\n get owlDTCalendarView(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n private dateTimeFormats: OwlDateTimeFormats\r\n ) {}\r\n\r\n public ngOnInit() {\r\n this.updateFirstDayOfWeek(this.dateTimeAdapter.getLocale());\r\n this.generateWeekDays();\r\n\r\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(\r\n locale => {\r\n this.updateFirstDayOfWeek(locale);\r\n this.generateWeekDays();\r\n this.generateCalendar();\r\n this.cdRef.markForCheck();\r\n }\r\n );\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.generateCalendar();\r\n this.initiated = true;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.localeSub.unsubscribe();\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор ячейки календаря\r\n */\r\n public selectCalendarCell(cell: CalendarCell): void {\r\n // Условия, при которых дата не выбирается:\r\n // 1) Ячейка календаря недоступна для выбора\r\n // 2) Дата находится вне текущего месяца и включён hideOtherMonths\r\n if (!cell.enabled || (this.hideOtherMonths && cell.out)) {\r\n return;\r\n }\r\n\r\n this.selectDate(cell.value);\r\n }\r\n\r\n /**\r\n * Обрабатывает keydown в таблице календаря\r\n */\r\n public handleCalendarKeydown(event: KeyboardEvent): void {\r\n let dateTime;\r\n switch (event.keyCode) {\r\n // На один день назад\r\n case LEFT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n -1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один день вперёд\r\n case RIGHT_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n 1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На одну неделю назад\r\n case UP_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n -7\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На одну неделю вперёд\r\n case DOWN_ARROW:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n 7\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К первому дню текущего месяца\r\n case HOME:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n 1 - this.dateTimeAdapter.getDate(this.pickerDateTime)\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // К последнему дню текущего месяца\r\n case END:\r\n dateTime = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerDateTime,\r\n this.dateTimeAdapter.getNumDaysInMonth(this.pickerDateTime) -\r\n this.dateTimeAdapter.getDate(this.pickerDateTime)\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один месяц (или год) назад\r\n case PAGE_UP:\r\n dateTime = event.altKey\r\n ? this.dateTimeAdapter.addCalendarYears(\r\n this.pickerDateTime,\r\n -1\r\n )\r\n : this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n -1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // На один месяц (или год) вперёд\r\n case PAGE_DOWN:\r\n dateTime = event.altKey\r\n ? this.dateTimeAdapter.addCalendarYears(\r\n this.pickerDateTime,\r\n 1\r\n )\r\n : this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerDateTime,\r\n 1\r\n );\r\n this.pickerDateTimeChange.emit(dateTime);\r\n break;\r\n\r\n // Выбирает активную дату\r\n case ENTER:\r\n if (this.isDateEnabled(this.dateTimeAdapter.addCalendarDays(\r\n this.firstDateOfMonth,\r\n this.dateTimeAdapter.getDate(this.pickerDateTime) - 1\r\n ))) {\r\n this.selectDate(\r\n this.dateTimeAdapter.getDate(this.pickerDateTime)\r\n );\r\n }\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this.focusActiveCell();\r\n event.preventDefault();\r\n }\r\n\r\n public getISOWeek(d: Date): number {\r\n const clonedDate = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\r\n // Используем для воскресенья номер дня 7\r\n clonedDate.setUTCDate(clonedDate.getUTCDate() + 4 - (clonedDate.getUTCDay()||7));\r\n // Получаем первый день года\r\n const yearStart = new Date(Date.UTC(clonedDate.getUTCFullYear(),0,1));\r\n // Вычисляем число полных недель до ближайшего четверга\r\n const weekNo = Math.ceil(( ( (+clonedDate - +yearStart) / 86400000) + 1)/7);\r\n return weekNo;\r\n }\r\n\r\n /**\r\n * Проверяет, что даты не равны null и находятся в одном месяце\r\n */\r\n public isSameMonth(dateLeft: T, dateRight: T): boolean {\r\n return (\r\n dateLeft != null &&\r\n dateRight != null &&\r\n this.dateTimeAdapter.isValid(dateLeft) &&\r\n this.dateTimeAdapter.isValid(dateRight) &&\r\n this.dateTimeAdapter.getYear(dateLeft) ===\r\n this.dateTimeAdapter.getYear(dateRight) &&\r\n this.dateTimeAdapter.getMonth(dateLeft) ===\r\n this.dateTimeAdapter.getMonth(dateRight)\r\n );\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор новой даты\r\n */\r\n private selectDate(date: number): void {\r\n const daysDiff = date - 1;\r\n const selected = this.dateTimeAdapter.addCalendarDays(\r\n this.firstDateOfMonth,\r\n daysDiff\r\n );\r\n\r\n this.selectedChange.emit(selected);\r\n this.userSelection.emit();\r\n }\r\n\r\n /**\r\n * Создаёт массив дней недели для календаря\r\n * */\r\n private generateWeekDays(): void {\r\n const longWeekdays = this.dateTimeAdapter.getDayOfWeekNames('long');\r\n const shortWeekdays = this.dateTimeAdapter.getDayOfWeekNames('short');\r\n const narrowWeekdays = this.dateTimeAdapter.getDayOfWeekNames('narrow');\r\n const firstDayOfWeek = this.firstDayOfWeek;\r\n\r\n const weekdays = longWeekdays.map((long, i) => {\r\n return { long, short: shortWeekdays[i], narrow: narrowWeekdays[i] };\r\n });\r\n\r\n this._weekdays = weekdays\r\n .slice(firstDayOfWeek-this.dateTimeAdapter.firstDayOfTheWeek)\r\n .concat(weekdays.slice(0, firstDayOfWeek-this.dateTimeAdapter.firstDayOfTheWeek));\r\n\r\n this.dateNames = this.dateTimeAdapter.getDateNames();\r\n\r\n return;\r\n }\r\n\r\n private updateFirstDayOfWeek(locale: string): void {\r\n if (this.isDefaultFirstDayOfWeek) {\r\n try {\r\n this._firstDayOfWeek = getLocaleFirstDayOfWeek(locale);\r\n } catch {\r\n this._firstDayOfWeek = 0;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Создаёт массив дней календаря\r\n * */\r\n private generateCalendar(): void {\r\n if (this.pickerDateTime == null) {\r\n return;\r\n }\r\n\r\n this.todayDate = null;\r\n this.weekNumbers = [];\r\n\r\n const startWeekdayOfMonth = this.dateTimeAdapter.getDay(\r\n this.firstDateOfMonth\r\n );\r\n const firstDayOfWeek = this.firstDayOfWeek;\r\n\r\n let daysDiff =\r\n 0 -\r\n ((startWeekdayOfMonth + (DAYS_PER_WEEK - firstDayOfWeek)) %\r\n DAYS_PER_WEEK);\r\n\r\n this.firstRowOffset = Math.abs(daysDiff);\r\n\r\n this._days = [];\r\n\r\n for (let i = 0; i < WEEKS_PER_VIEW; i++) {\r\n const week = [];\r\n const weekStartDate = this.dateTimeAdapter.addCalendarDays(\r\n this.firstDateOfMonth,\r\n daysDiff\r\n );\r\n\r\n for (let j = 0; j < DAYS_PER_WEEK; j++) {\r\n const date = this.dateTimeAdapter.addCalendarDays(\r\n this.firstDateOfMonth,\r\n daysDiff\r\n );\r\n\r\n const dateCell = this.createDateCell(date, daysDiff);\r\n\r\n if (\r\n this.dateTimeAdapter.isSameDay(\r\n this.dateTimeAdapter.now(),\r\n date\r\n )\r\n ) {\r\n this.todayDate = daysDiff + 1;\r\n }\r\n\r\n week.push(dateCell);\r\n daysDiff += 1;\r\n }\r\n\r\n this._days.push(week);\r\n\r\n if (this.showCalendarWeeks) {\r\n const weekNumber = this.getISOWeekFromDate(weekStartDate);\r\n this.weekNumbers.push(weekNumber);\r\n }\r\n }\r\n\r\n this.setSelectedDates();\r\n }\r\n\r\n /**\r\n * Создаёт CalendarCell для дней\r\n */\r\n private createDateCell(date: T, daysDiff: number): CalendarCell {\r\n // Количество дней в месяце\r\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(\r\n this.pickerDateTime\r\n );\r\n const dateNum = this.dateTimeAdapter.getDate(date);\r\n // const dateName = this.dateNames[dateNum - 1];\r\n const dateName = dateNum.toString();\r\n const ariaLabel = this.dateTimeAdapter.format(\r\n date,\r\n this.dateTimeFormats.dateA11yLabel\r\n );\r\n\r\n // Проверяем доступность даты для выбора\r\n const enabled = this.isDateEnabled(date);\r\n\r\n // Проверяем, находится ли дата вне текущего месяца\r\n const dayValue = daysDiff + 1;\r\n const out = dayValue < 1 || dayValue > daysInMonth;\r\n const cellClass = 'owl-dt-day-' + this.dateTimeAdapter.getDay(date);\r\n\r\n return new CalendarCell(\r\n dayValue,\r\n dateName,\r\n ariaLabel,\r\n enabled,\r\n out,\r\n cellClass\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет допустимость даты\r\n */\r\n private isDateEnabled(date: T): boolean {\r\n return (\r\n date != null &&\r\n (!this.dateFilter || this.dateFilter(date)) &&\r\n (this.minDate == null ||\r\n this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\r\n (this.maxDate == null ||\r\n this.dateTimeAdapter.compare(date, this.maxDate) <= 0)\r\n );\r\n }\r\n\r\n /**\r\n * Возвращает корректный объект даты\r\n */\r\n private getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n\r\n private getISOWeekFromDate(date: T): number {\r\n const jsDate = new Date(Date.UTC(\r\n this.dateTimeAdapter.getYear(date),\r\n this.dateTimeAdapter.getMonth(date),\r\n this.dateTimeAdapter.getDate(date),\r\n ));\r\n\r\n jsDate.setUTCDate(\r\n jsDate.getUTCDate() + 4 - (jsDate.getUTCDay() || 7)\r\n );\r\n\r\n const yearStart = new Date(Date.UTC(jsDate.getUTCFullYear(), 0, 1));\r\n\r\n return Math.ceil((((+jsDate - +yearStart) / 86400000) + 1) / 7);\r\n }\r\n\r\n /**\r\n * Задаёт значение selectedDates\r\n * В режиме single содержит одно значение — выбранную дату\r\n * В режиме range содержит два значения: fromValue и toValue\r\n * */\r\n private setSelectedDates(): void {\r\n this.selectedDates = [];\r\n\r\n if (this.firstDateOfMonth == null) {\r\n return;\r\n }\r\n\r\n if (this.isInSingleMode && this.selected != null) {\r\n const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(\r\n this.selected,\r\n this.firstDateOfMonth\r\n );\r\n this.selectedDates[0] = dayDiff + 1;\r\n return;\r\n }\r\n\r\n if (this.isInRangeMode && this.selecteds) {\r\n this.selectedDates = this.selecteds.map(selected => {\r\n if (this.dateTimeAdapter.isValid(selected)) {\r\n const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(\r\n selected,\r\n this.firstDateOfMonth\r\n );\r\n return dayDiff + 1;\r\n } else {\r\n return null;\r\n }\r\n });\r\n }\r\n }\r\n\r\n private focusActiveCell() {\r\n this.calendarBodyElm.focusActiveCell();\r\n }\r\n}\r\n","@if (showCalendarWeeks) {\r\n <ul class=\"week-number\">\r\n @for (week of weekNumbers; track week) {\r\n <li>\r\n <span>{{ week }}</span>\r\n </li>\r\n }\r\n </ul>\r\n}\r\n<table\r\n class=\"owl-dt-calendar-table owl-dt-calendar-month-table\"\r\n [ngClass]=\"{ 'owl-calendar-weeks': showCalendarWeeks }\"\r\n [class.owl-dt-calendar-only-current-month]=\"hideOtherMonths\"\r\n>\r\n <thead class=\"owl-dt-calendar-header\">\r\n <tr class=\"owl-dt-weekdays\">\r\n @for (weekday of weekdays; track weekday.short) {\r\n <th\r\n [attr.aria-label]=\"weekday.long\"\r\n class=\"owl-dt-weekday\"\r\n scope=\"col\"\r\n >\r\n <span>{{ weekday.short }}</span>\r\n </th>\r\n }\r\n </tr>\r\n <tr>\r\n <th\r\n class=\"owl-dt-calendar-table-divider\"\r\n [ngClass]=\"{ 'owl-calendar-weeks': showCalendarWeeks }\"\r\n aria-hidden=\"true\"\r\n colspan=\"7\"\r\n ></th>\r\n </tr>\r\n </thead>\r\n <tbody\r\n owl-date-time-calendar-body\r\n role=\"grid\"\r\n [rows]=\"days\"\r\n [todayValue]=\"todayDate\"\r\n [selectedValues]=\"selectedDates\"\r\n [selectMode]=\"selectMode\"\r\n [activeCell]=\"activeCell\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\"\r\n ></tbody>\r\n</table>\r\n","/**\r\n * calendar.component\r\n */\r\n\r\nimport { AfterContentInit, afterNextRender, AfterRenderRef, AfterViewChecked, ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, inject, Inject, Injector, Input, NgZone, OnDestroy, OnInit, Optional, Output } from '@angular/core';\r\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { OWL_DATE_TIME_FORMATS, OwlDateTimeFormats } from './adapter/date-time-format.class';\r\nimport { DateView, DateViewType, SelectMode } from './date-time.class';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'owl-date-time-calendar',\r\n exportAs: 'owlDateTimeCalendar',\r\n templateUrl: './calendar.component.html',\r\n styleUrls: ['./calendar.component.scss'],\r\n standalone: false,\r\n host: {\r\n '[class.owl-dt-calendar]': 'owlDTCalendarClass'\r\n },\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OwlCalendarComponent<T>\r\n implements OnInit, AfterContentInit, AfterViewChecked, OnDestroy {\r\n\r\n /**\r\n * Фильтр дат для представлений месяца и года\r\n * */\r\n @Input()\r\n dateFilter: (date: T) => boolean;\r\n /**\r\n * Задаёт первый день недели\r\n */\r\n @Input()\r\n firstDayOfWeek: number;\r\n /**\r\n * Начальное представление календаря\r\n */\r\n @Input()\r\n startView: DateViewType = DateView.MONTH;\r\n\r\n DateView = DateView;\r\n\r\n @Input()\r\n get minDate(): T | null {\r\n return this._minDate;\r\n }\r\n /**\r\n * Нужно ли показывать только представления года и нескольких лет\r\n */\r\n @Input()\r\n yearOnly = false;\r\n\r\n @Input()\r\n get maxDate(): T | null {\r\n return this._maxDate;\r\n }\r\n /**\r\n * Нужно ли показывать номера недель в календаре\r\n * */\r\n @Input()\r\n showCalendarWeeks = false;\r\n\r\n @Input()\r\n get pickerDateTime() {\r\n return this._pickerDateTime;\r\n }\r\n /**\r\n * Нужно ли показывать только представление нескольких лет\r\n */\r\n @Input()\r\n multiyearOnly = false;\r\n\r\n @Input()\r\n get selected(): T | null {\r\n return this._selected;\r\n }\r\n\r\n set selected(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._selected = this.getValidDate(value);\r\n }\r\n\r\n @Input()\r\n get selecteds(): T[] {\r\n return this._selecteds;\r\n }\r\n /**\r\n * Нужно ли скрывать даты соседних месяцев в начале или конце текущего месяца\r\n * */\r\n @Input()\r\n hideOtherMonths: boolean;\r\n\r\n get periodButtonText(): string {\r\n return this.isMonthView\r\n ? this.dateTimeAdapter.format(\r\n this.pickerDateTime,\r\n this.dateTimeFormats.monthYearLabel\r\n )\r\n : this.dateTimeAdapter.getYearName(this.pickerDateTime);\r\n }\r\n\r\n get periodButtonLabel(): string {\r\n return this.isMonthView\r\n ? this.pickerIntl.switchToMultiYearViewLabel\r\n : this.pickerIntl.switchToMonthViewLabel;\r\n }\r\n\r\n get prevButtonLabel(): string {\r\n if (this._currentView === DateView.MONTH) {\r\n return this.pickerIntl.prevMonthLabel;\r\n } else if (this._currentView === DateView.YEAR) {\r\n return this.pickerIntl.prevYearLabel;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n get nextButtonLabel(): string {\r\n if (this._currentView === DateView.MONTH) {\r\n return this.pickerIntl.nextMonthLabel;\r\n } else if (this._currentView === DateView.YEAR) {\r\n return this.pickerIntl.nextYearLabel;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n get currentView(): DateViewType {\r\n return this._currentView;\r\n }\r\n\r\n set currentView(view: DateViewType) {\r\n this._currentView = view;\r\n this.moveFocusOnNextTick = true;\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this.selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom' ||\r\n this.selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n get showControlArrows(): boolean {\r\n return this._currentView !== DateView.MULTI_YEARS;\r\n }\r\n\r\n get isMonthView() {\r\n return this._currentView === DateView.MONTH;\r\n }\r\n /** Событие изменения отображаемых даты и времени */\r\n @Output()\r\n pickerDateTimeChange = new EventEmitter<T>();\r\n /** Событие изменения выбранной даты */\r\n @Output()\r\n readonly dateClicked = new EventEmitter<T>();\r\n /** Событие изменения текущей выбранной даты */\r\n @Output()\r\n readonly selectedChange = new EventEmitter<T>();\r\n /** Событие выбора любой даты */\r\n @Output()\r\n readonly userSelection = new EventEmitter<void>();\r\n /**\r\n * Передаёт выбранный год, не изменяя выбранную дату\r\n * */\r\n @Output()\r\n readonly yearSelected = new EventEmitter<T>();\r\n /**\r\n * Передаёт выбранный месяц, не изменяя выбранную дату\r\n * */\r\n @Output()\r\n readonly monthSelected = new EventEmitter<T>();\r\n private readonly injector = inject(Injector);\r\n\r\n @Input()\r\n selectMode: SelectMode;\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n private _selecteds: T[] = [];\r\n private focusRef: AfterRenderRef | undefined;\r\n /** Минимальная доступная для выбора дата */\r\n private _minDate: T | null;\r\n /** Максимальная доступная для выбора дата */\r\n private _maxDate: T | null;\r\n /** Дата и время, отображаемые в компоненте выбора */\r\n private _pickerDateTime: T;\r\n /** Текущие выбранные дата и время */\r\n private _selected: T | null;\r\n /**\r\n * Откладывает перевод фокуса на активную ячейку до следующего обновления представления\r\n * Перевод фокуса откладывается, чтобы дождаться, пока Angular\r\n * обновит дочерние элементы представления\r\n */\r\n private moveFocusOnNextTick = false;\r\n\r\n constructor(\r\n private elmRef: ElementRef<HTMLElement>,\r\n private pickerIntl: OwlDateTimeIntl,\r\n private ngZone: NgZone,\r\n private cdRef: ChangeDetectorRef,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n private dateTimeFormats: OwlDateTimeFormats\r\n ) {\r\n this.intlChangesSub = this.pickerIntl.changes.subscribe(() => {\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n set minDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n value = this.getValidDate(value);\r\n\r\n this._minDate = value != null\r\n ? this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(value),\r\n this.dateTimeAdapter.getMonth(value),\r\n this.dateTimeAdapter.getDate(value)\r\n )\r\n : null;\r\n }\r\n\r\n set maxDate(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n value = this.getValidDate(value);\r\n\r\n this._maxDate = value != null\r\n ? this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(value),\r\n this.dateTimeAdapter.getMonth(value),\r\n this.dateTimeAdapter.getDate(value)\r\n )\r\n : null;\r\n }\r\n\r\n set pickerDateTime(value: T) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._pickerDateTime =\r\n this.getValidDate(value) ?? this.dateTimeAdapter.now();\r\n }\r\n\r\n set selecteds(values: T[]) {\r\n this._selecteds = (values ?? []).map(v => {\r\n v = this.dateTimeAdapter.deserialize(v);\r\n return this.getValidDate(v);\r\n });\r\n }\r\n\r\n private _currentView: DateViewType;\r\n\r\n private intlChangesSub = Subscription.EMPTY;\r\n\r\n /**\r\n * Добавляет класс 'owl-dt-calendar' к элементу компонента\r\n * */\r\n get owlDTCalendarClass(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Фильтр дат для представлений месяца и года\r\n */\r\n public dateFilterForViews = (date: T) => {\r\n return (\r\n date != null &&\r\n (!this.dateFilter || this.dateFilter(date)) &&\r\n (this.minDate == null ||\r\n this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\r\n (this.maxDate == null ||\r\n this.dateTimeAdapter.compare(date, this.maxDate) <= 0)\r\n );\r\n };\r\n\r\n public ngOnInit() {\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this._currentView = this.startView;\r\n }\r\n\r\n public ngAfterViewChecked() {\r\n if (this.moveFocusOnNextTick) {\r\n this.moveFocusOnNextTick = false;\r\n this.focusActiveCell();\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.intlChangesSub.unsubscribe();\r\n }\r\n\r\n /**\r\n * Переключает представления месяца и года\r\n */\r\n public toggleViews(): void {\r\n let nextView = null;\r\n if (this._currentView === DateView.MONTH) {\r\n nextView = DateView.MULTI_YEARS;\r\n } else {\r\n if (this.multiyearOnly) {\r\n nextView = DateView.MULTI_YEARS;\r\n } else if (this.yearOnly) {\r\n nextView = this._currentView === DateView.YEAR ? DateView.MULTI_YEARS : DateView.YEAR;\r\n } else {\r\n nextView = DateView.MONTH;\r\n }\r\n }\r\n this.currentView = nextView;\r\n }\r\n\r\n /**\r\n * Обрабатывает нажатие кнопки перехода к предыдущему периоду\r\n * */\r\n public previousClicked(): void {\r\n this.pickerDateTime = this.isMonthView\r\n ? this.dateTimeAdapter.addCalendarMonths(this.pickerDateTime, -1)\r\n : this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, -1);\r\n\r\n this.pickerDateTimeChange.emit(this.pickerDateTime);\r\n }\r\n\r\n /**\r\n * Обрабатывает нажатие кнопки перехода к следующему периоду\r\n * */\r\n public nextClicked(): void {\r\n this.pickerDateTime = this.isMonthView\r\n ? this.dateTimeAdapter.addCalendarMonths(this.pickerDateTime, 1)\r\n : this.dateTimeAdapter.addCalendarYears(this.pickerDateTime, 1);\r\n\r\n this.pickerDateTimeChange.emit(this.pickerDateTime);\r\n }\r\n\r\n public dateSelected(date: T): void {\r\n if (!this.dateFilterForViews(date)) {\r\n return;\r\n }\r\n\r\n this.dateClicked.emit(date);\r\n this.selectedChange.emit(date);\r\n\r\n /*if ((this.isInSingleMode && !this.dateTimeAdapter.isSameDay(date, this.selected)) ||\r\n this.isInRangeMode) {\r\n this.selectedChange.emit(date);\r\n }*/\r\n }\r\n\r\n /**\r\n * Меняет отображаемую дату и переключается на указанное представление\r\n */\r\n public goToDateInView(\r\n date: T,\r\n view: DateViewType\r\n ): void {\r\n this.handlePickerDateTimeChange(date);\r\n if ((!this.yearOnly && !this.multiyearOnly) ||\r\n (this.multiyearOnly && (view !== DateView.MONTH && view !== DateView.YEAR)) ||\r\n (this.yearOnly && view !== DateView.MONTH)) {\r\n this.currentView = view;\r\n } else {\r\n this.dateSelected(date);\r\n }\r\n return;\r\n }\r\n\r\n /**\r\n * Меняет отображаемую дату\r\n */\r\n public handlePickerDateTimeChange(date: T): void {\r\n this.pickerDateTime = this.dateTimeAdapter.clampDate(\r\n date,\r\n this.minDate,\r\n this.maxDate\r\n );\r\n this.pickerDateTimeChange.emit(this.pickerDateTime);\r\n return;\r\n }\r\n\r\n public userSelected(): void {\r\n this.userSelection.emit();\r\n }\r\n\r\n /**\r\n * Доступна ли кнопка перехода к предыдущему периоду\r\n */\r\n public prevButtonEnabled(): boolean {\r\n return (\r\n this.minDate == null || !this.isSameView(this.pickerDateTime, this.minDate)\r\n );\r\n }\r\n\r\n /**\r\n * Доступна ли кнопка перехода к следующему периоду\r\n */\r\n public nextButtonEnabled(): boolean {\r\n return (\r\n this.maxDate == null || !this.isSameView(this.pickerDateTime, this.maxDate)\r\n );\r\n }\r\n\r\n /**\r\n * Переводит фокус на элемент компонента\r\n * */\r\n public focusActiveCell() {\r\n if (this.destroyRef.destroyed) {\r\n return;\r\n }\r\n\r\n this.focusRef?.destroy();\r\n this.focusRef = afterNextRender({\r\n write: () => {\r\n this.focusRef = undefined;\r\n this.elmRef.nativeElement.querySelector<HTMLElement>('.owl-dt-calendar-cell-active')\r\n ?.focus();\r\n }\r\n }, { injector: this.injector });\r\n }\r\n\r\n public selectYearInMultiYearView(normalizedYear: T): void {\r\n this.yearSelected.emit(normalizedYear);\r\n }\r\n\r\n public selectMonthInYearView(normalizedMonth: T): void {\r\n this.monthSelected.emit(normalizedMonth);\r\n }\r\n\r\n /**\r\n * Соответствуют ли две даты одному представлению в текущем режиме (месяц или год)\r\n */\r\n private isSameView(date1: T, date2: T): boolean {\r\n if (this._currentView === DateView.MONTH) {\r\n return !!(\r\n date1 != null &&\r\n date2 != null &&\r\n this.dateTimeAdapter.getYear(date1) ===\r\n this.dateTimeAdapter.getYear(date2) &&\r\n this.dateTimeAdapter.getMonth(date1) ===\r\n this.dateTimeAdapter.getMonth(date2)\r\n );\r\n } else if (this._currentView === DateView.YEAR) {\r\n return !!(\r\n date1 != null &&\r\n date2 != null &&\r\n this.dateTimeAdapter.getYear(date1) ===\r\n this.dateTimeAdapter.getYear(date2)\r\n );\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Возвращает корректный объект даты\r\n */\r\n private getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n}\r\n","<div class=\"owl-dt-calendar-control\">\r\n <!-- Фокус при навигации клавишей Tab (http://kizu.ru/en/blog/keyboard-only-focus/#x) -->\r\n <button\r\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [style.visibility]=\"showControlArrows ? 'visible' : 'hidden'\"\r\n [disabled]=\"!prevButtonEnabled()\"\r\n [attr.aria-label]=\"prevButtonLabel\"\r\n (click)=\"previousClicked()\"\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-control-button-content\"\r\n tabindex=\"-1\"\r\n >\r\n <!-- <editor-fold desc=\"SVG-стрелка влево\"> -->\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background: new 0 0 250.738 250.738\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n >\r\n <path\r\n style=\"fill-rule: evenodd; clip-rule: evenodd\"\r\n d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\"\r\n />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </button>\r\n <div class=\"owl-dt-calendar-control-content\">\r\n <button\r\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-period-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"periodButtonLabel\"\r\n (click)=\"toggleViews()\"\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-control-button-content\"\r\n tabindex=\"-1\"\r\n >\r\n {{ periodButtonText }}\r\n\r\n <span\r\n class=\"owl-dt-control-button-arrow\"\r\n [style.transform]=\"\r\n 'rotate(' + (isMonthView ? 0 : 180) + 'deg)'\r\n \"\r\n >\r\n <!-- <editor-fold desc=\"SVG-стрелка\"> -->\r\n <svg\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n width=\"50%\"\r\n height=\"50%\"\r\n viewBox=\"0 0 292.362 292.362\"\r\n style=\"enable-background: new 0 0 292.362 292.362\"\r\n xml:space=\"preserve\"\r\n >\r\n <g>\r\n <path\r\n d=\"M286.935,69.377c-3.614-3.617-7.898-5.424-12.848-5.424H18.274c-4.952,0-9.233,1.807-12.85,5.424\r\n C1.807,72.998,0,77.279,0,82.228c0,4.948,1.807,9.229,5.424,12.847l127.907,127.907c3.621,3.617,7.902,5.428,12.85,5.428\r\n s9.233-1.811,12.847-5.428L286.935,95.074c3.613-3.617,5.427-7.898,5.427-12.847C292.362,77.279,290.548,72.998,286.935,69.377z\"\r\n />\r\n </g>\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </span>\r\n </button>\r\n </div>\r\n <button\r\n class=\"owl-dt-control owl-dt-control-button owl-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [style.visibility]=\"showControlArrows ? 'visible' : 'hidden'\"\r\n [disabled]=\"!nextButtonEnabled()\"\r\n [attr.aria-label]=\"nextButtonLabel\"\r\n (click)=\"nextClicked()\"\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-control-button-content\"\r\n tabindex=\"-1\"\r\n >\r\n <!-- <editor-fold desc=\"SVG-стрелка вправо\"> -->\r\n <svg\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background: new 0 0 250.738 250.738\"\r\n xml:space=\"preserve\"\r\n >\r\n <path\r\n style=\"fill-rule: evenodd; clip-rule: evenodd\"\r\n d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\r\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\r\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\r\n C197.237,120.447,195.534,115.448,191.75,111.689z\"\r\n />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </button>\r\n</div>\r\n<div class=\"owl-dt-calendar-main\" cdkMonitorSubtreeFocus tabindex=\"-1\">\r\n @switch (currentView) {\r\n @case (DateView.MONTH) {\r\n <owl-date-time-month-view\r\n [pickerDateTime]=\"pickerDateTime\"\r\n [firstDayOfWeek]=\"firstDayOfWeek\"\r\n [selected]=\"selected\"\r\n [selecteds]=\"selecteds\"\r\n [selectMode]=\"selectMode\"\r\n [minDate]=\"minDate\"\r\n [showCalendarWeeks]=\"showCalendarWeeks\"\r\n [maxDate]=\"maxDate\"\r\n [dateFilter]=\"dateFilter\"\r\n [hideOtherMonths]=\"hideOtherMonths\"\r\n (pickerDateTimeChange)=\"handlePickerDateTimeChange($event)\"\r\n (selectedChange)=\"dateSelected($event)\"\r\n (userSelection)=\"userSelected()\"\r\n ></owl-date-time-month-view>\r\n }\r\n @case (DateView.YEAR) {\r\n <owl-date-time-year-view\r\n [pickerDateTime]=\"pickerDateTime\"\r\n [selected]=\"selected\"\r\n [selecteds]=\"selecteds\"\r\n [selectMode]=\"selectMode\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [dateFilter]=\"dateFilter\"\r\n (keyboardEnter)=\"focusActiveCell()\"\r\n (pickerDateTimeChange)=\"handlePickerDateTimeChange($event)\"\r\n (monthSelected)=\"selectMonthInYearView($event)\"\r\n (change)=\"goToDateInView($event, DateView.MONTH)\"\r\n ></owl-date-time-year-view>\r\n }\r\n @case (DateView.MULTI_YEARS) {\r\n <owl-date-time-multi-year-view\r\n [pickerDateTime]=\"pickerDateTime\"\r\n [selected]=\"selected\"\r\n [selecteds]=\"selecteds\"\r\n [selectMode]=\"selectMode\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [dateFilter]=\"dateFilter\"\r\n (keyboardEnter)=\"focusActiveCell()\"\r\n (pickerDateTimeChange)=\"handlePickerDateTimeChange($event)\"\r\n (yearSelected)=\"selectYearInMultiYearView($event)\"\r\n (change)=\"goToDateInView($event, DateView.YEAR)\"\r\n ></owl-date-time-multi-year-view>\r\n }\r\n }\r\n</div>\r\n","/**\r\n * timer-box.component\r\n */\r\n\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n@Component({\r\n exportAs: 'owlDateTimeTimerBox',\r\n selector: 'owl-date-time-timer-box',\r\n templateUrl: './timer-box.component.html',\r\n styleUrls: ['./timer-box.component.scss'],\r\n standalone: false,\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.owl-dt-timer-box]': 'owlDTTimerBoxClass'\r\n }\r\n})\r\n\r\nexport class OwlTimerBoxComponent implements OnInit, OnDestroy {\r\n\r\n @Input() showDivider = false;\r\n\r\n @Input() upBtnAriaLabel: string;\r\n\r\n @Input() upBtnDisabled: boolean;\r\n\r\n @Input() downBtnAriaLabel: string;\r\n\r\n @Input() downBtnDisabled: boolean;\r\n\r\n /**\r\n * Значение, отображаемое в поле\r\n * Если равно null, в поле отображается [value]\r\n * */\r\n @Input() boxValue: number;\r\n\r\n @Input() value: number;\r\n\r\n @Input() min: number;\r\n\r\n @Input() max: number;\r\n\r\n @Input() step = 1;\r\n\r\n @Input() inputLabel: string;\r\n\r\n @Output() valueChange = new EventEmitter<number>();\r\n\r\n @Output() inputChange = new EventEmitter<number>();\r\n\r\n private inputStream = new Subject<string>();\r\n\r\n private inputStreamSub = Subscription.EMPTY;\r\n\r\n private isEditing = false;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {\r\n }\r\n\r\n get owlDTTimerBoxClass(): boolean {\r\n return true;\r\n }\r\n\r\n @ViewChild('valueInput', { static: true })\r\n private valueInput: ElementRef<HTMLInputElement>;\r\n private onValueInputMouseWheelBind = this.onValueInputMouseWheel.bind(this);\r\n\r\n get displayValue(): string {\r\n if (this.isEditing) {\r\n // Не переформатируем значение, пока пользователь его редактирует\r\n return this.valueInput.nativeElement.value;\r\n }\r\n\r\n const value = this.boxValue ?? this.value;\r\n\r\n if (value == null || isNaN(value)) {\r\n return '';\r\n }\r\n\r\n return value < 10 ? '0' + value.toString() : value.toString();\r\n }\r\n\r\n public ngOnInit() {\r\n this.inputStreamSub = this.inputStream.pipe(debounceTime(750)).subscribe(( val: string ) => {\r\n if (val) {\r\n const inputValue = coerceNumberProperty(val, 0);\r\n this.updateValueViaInput(inputValue);\r\n }\r\n });\r\n this.bindValueInputMouseWheel();\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.unbindValueInputMouseWheel();\r\n this.inputStreamSub.unsubscribe();\r\n }\r\n\r\n public upBtnClicked(): void {\r\n this.updateValue(this.value + this.step);\r\n }\r\n\r\n public downBtnClicked(): void {\r\n this.updateValue(this.value - this.step);\r\n }\r\n\r\n public handleInputChange(val: string ): void {\r\n this.isEditing = true;\r\n this.inputStream.next(val);\r\n }\r\n\r\n public focusIn(): void {\r\n this.isEditing = true;\r\n }\r\n\r\n public focusOut(value: string): void {\r\n const wasEditing = this.isEditing;\r\n this.isEditing = false;\r\n // Отменяем ожидающий debounce: blur сразу фиксирует текущий текст\r\n this.inputStream.next('');\r\n if (wasEditing && value) {\r\n const inputValue = coerceNumberProperty(value, 0);\r\n this.updateValueViaInput(inputValue);\r\n }\r\n }\r\n\r\n private updateValue( value: number ): void {\r\n // Шаг заменяет введённый текст; отложенный input и blur не должны откатывать значение\r\n this.isEditing = false;\r\n this.inputStream.next('');\r\n this.valueChange.emit(value);\r\n }\r\n\r\n private updateValueViaInput( value: number ): void {\r\n if (value > this.max || value < this.min) {\r\n return;\r\n }\r\n this.inputChange.emit(value);\r\n }\r\n\r\n private onValueInputMouseWheel( event: any ): void {\r\n event = event || window.event;\r\n const delta = event.deltaY != null ? -event.deltaY : event.wheelDelta || -event.detail;\r\n\r\n if (delta > 0) {\r\n if (!this.upBtnDisabled) {\r\n this.upBtnClicked();\r\n }\r\n } else if (delta < 0) {\r\n if (!this.downBtnDisabled) {\r\n this.downBtnClicked();\r\n }\r\n }\r\n\r\n this.changeDetector.markForCheck();\r\n event.preventDefault ? event.preventDefault() : (event.returnValue = false);\r\n }\r\n\r\n private bindValueInputMouseWheel(): void {\r\n this.valueInput.nativeElement.addEventListener(\r\n 'onwheel' in this.valueInput.nativeElement.ownerDocument ? 'wheel' : 'mousewheel',\r\n this.onValueInputMouseWheelBind);\r\n }\r\n\r\n private unbindValueInputMouseWheel(): void {\r\n this.valueInput.nativeElement.removeEventListener(\r\n 'onwheel' in this.valueInput.nativeElement.ownerDocument ? 'wheel' : 'mousewheel',\r\n this.onValueInputMouseWheelBind);\r\n }\r\n}\r\n","@if (showDivider) {\r\n <div class=\"owl-dt-timer-divider\" aria-hidden=\"true\"></div>\r\n}\r\n<button\r\n class=\"owl-dt-control-button owl-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [disabled]=\"upBtnDisabled\"\r\n [attr.aria-label]=\"upBtnAriaLabel\"\r\n (click)=\"upBtnClicked()\"\r\n>\r\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG-стрелка вверх\"> -->\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 451.847 451.846\"\r\n style=\"enable-background: new 0 0 451.847 451.846\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n >\r\n <path\r\n d=\"M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0\r\n L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4\r\n c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z\"\r\n />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n<label class=\"owl-dt-timer-content\">\r\n <input\r\n class=\"owl-dt-timer-input\"\r\n maxlength=\"2\"\r\n [value]=\"displayValue\"\r\n (keydown.arrowup)=\"!upBtnDisabled && upBtnClicked()\"\r\n (keydown.arrowdown)=\"!downBtnDisabled && downBtnClicked()\"\r\n (input)=\"handleInputChange(valueInput.value)\"\r\n (focusin)=\"focusIn()\"\r\n (focusout)=\"focusOut(valueInput.value)\"\r\n #valueInput\r\n />\r\n <span class=\"owl-hidden-accessible\">{{ inputLabel }}</span>\r\n</label>\r\n<button\r\n class=\"owl-dt-control-button owl-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [disabled]=\"downBtnDisabled\"\r\n [attr.aria-label]=\"downBtnAriaLabel\"\r\n (click)=\"downBtnClicked()\"\r\n>\r\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG-стрелка вниз\"> -->\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 451.847 451.846\"\r\n style=\"enable-background: new 0 0 451.847 451.846\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n >\r\n <path\r\n d=\"M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751\r\n c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0\r\n c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z\"\r\n />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n","/**\r\n * timer.component\r\n */\r\n\r\nimport { afterNextRender, AfterRenderRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, inject, Injector, Input, NgZone, OnDestroy, OnInit, Optional, Output } from '@angular/core';\r\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n exportAs: 'owlDateTimeTimer',\r\n selector: 'owl-date-time-timer',\r\n templateUrl: './timer.component.html',\r\n styleUrls: ['./timer.component.scss'],\r\n preserveWhitespaces: false,\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.owl-dt-timer]': 'owlDTTimerClass',\r\n '[attr.tabindex]': 'owlDTTimeTabIndex'\r\n }\r\n})\r\nexport class OwlTimerComponent<T> implements OnInit, OnDestroy {\r\n /**\r\n * Нужно ли показывать поле секунд\r\n */\r\n @Input()\r\n showSecondsTimer: boolean;\r\n /**\r\n * Используется ли 12-часовой формат времени\r\n */\r\n @Input()\r\n hour12Timer: boolean;\r\n /**\r\n * Количество часов за один шаг\r\n */\r\n @Input()\r\n stepHour = 1;\r\n /**\r\n * Количество минут за один шаг\r\n */\r\n @Input()\r\n stepMinute = 1;\r\n /**\r\n * Количество секунд за один шаг\r\n */\r\n @Input()\r\n stepSecond = 1;\r\n @Input()\r\n get pickerDateTime() {\r\n return this._pickerDateTime;\r\n }\r\n private readonly injector = inject(Injector);\r\n private readonly destroyRef = inject(DestroyRef);\r\n @Input()\r\n get minDateTime(): T | null {\r\n return this._minDateTime;\r\n }\r\n\r\n set minDateTime(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._minDateTime = this.getValidDate(value);\r\n }\r\n private focusRef: AfterRenderRef | undefined;\r\n @Input()\r\n get maxDateTime(): T | null {\r\n return this._maxDateTime;\r\n }\r\n\r\n set maxDateTime(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._maxDateTime = this.getValidDate(value);\r\n }\r\n private intlChangesSub = Subscription.EMPTY;\r\n /** Дата и время, отображаемые в компоненте выбора */\r\n private _pickerDateTime: T;\r\n /** Минимальные доступные для выбора дата и время */\r\n private _minDateTime: T | null;\r\n /** Максимальные доступные для выбора дата и время */\r\n private _maxDateTime: T | null;\r\n private isPM = false; // Относится ли текущее время к PM в 12-часовом формате\r\n\r\n constructor(\r\n private ngZone: NgZone,\r\n private elmRef: ElementRef<HTMLElement>,\r\n private pickerIntl: OwlDateTimeIntl,\r\n private cdRef: ChangeDetectorRef,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>\r\n ) {\r\n this.intlChangesSub = this.pickerIntl.changes.subscribe(() => this.cdRef.markForCheck());\r\n }\r\n\r\n get hourValue(): number {\r\n return this.dateTimeAdapter.getHours(this.pickerDateTime);\r\n }\r\n\r\n set pickerDateTime(value: T) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this._pickerDateTime =\r\n this.getValidDate(value) ?? this.dateTimeAdapter.now();\r\n }\r\n\r\n get minuteValue(): number {\r\n return this.dateTimeAdapter.getMinutes(this.pickerDateTime);\r\n }\r\n\r\n get secondValue(): number {\r\n return this.dateTimeAdapter.getSeconds(this.pickerDateTime);\r\n }\r\n\r\n get upHourButtonLabel(): string {\r\n return this.pickerIntl.upHourLabel;\r\n }\r\n\r\n get downHourButtonLabel(): string {\r\n return this.pickerIntl.downHourLabel;\r\n }\r\n\r\n get upMinuteButtonLabel(): string {\r\n return this.pickerIntl.upMinuteLabel;\r\n }\r\n\r\n get downMinuteButtonLabel(): string {\r\n return this.pickerIntl.downMinuteLabel;\r\n }\r\n\r\n get upSecondButtonLabel(): string {\r\n return this.pickerIntl.upSecondLabel;\r\n }\r\n\r\n get downSecondButtonLabel(): string {\r\n return this.pickerIntl.downSecondLabel;\r\n }\r\n\r\n get hour12ButtonLabel(): string {\r\n return this.isPM\r\n ? this.pickerIntl.hour12PMLabel\r\n : this.pickerIntl.hour12AMLabel;\r\n }\r\n\r\n @Output()\r\n selectedChange = new EventEmitter<T>();\r\n\r\n get owlDTTimerClass(): boolean {\r\n return true;\r\n }\r\n\r\n get owlDTTimeTabIndex(): number {\r\n return -1;\r\n }\r\n\r\n /**\r\n * Значение, отображаемое в hourBox\r\n * Оно требуется, поскольку значение в hourBox отличается\r\n * от hourValue в режиме hour12Timer\r\n * */\r\n get hourBoxValue(): number {\r\n let hours = this.hourValue;\r\n\r\n if (!this.hour12Timer) {\r\n return hours;\r\n } else {\r\n if (hours === 0) {\r\n hours = 12;\r\n this.isPM = false;\r\n } else if (hours > 0 && hours < 12) {\r\n this.isPM = false;\r\n } else if (hours === 12) {\r\n this.isPM = true;\r\n } else if (hours > 12 && hours < 24) {\r\n hours = hours - 12;\r\n this.isPM = true;\r\n }\r\n\r\n return hours;\r\n }\r\n }\r\n\r\n public ngOnInit() {}\r\n\r\n public ngOnDestroy(): void {\r\n this.intlChangesSub.unsubscribe();\r\n }\r\n\r\n /**\r\n * Переводит фокус на элемент компонента\r\n * */\r\n public focus() {\r\n if (this.destroyRef.destroyed) {\r\n return;\r\n }\r\n\r\n this.focusRef?.destroy();\r\n this.focusRef = afterNextRender({\r\n write: () => {\r\n this.focusRef = undefined;\r\n this.elmRef.nativeElement.focus();\r\n }\r\n }, { injector: this.injector });\r\n }\r\n\r\n /**\r\n * Задаёт час при вводе текста в поле времени\r\n * Нужно для обработки часа в 12-часовом формате времени\r\n * */\r\n public setHourValueViaInput(hours: number): void {\r\n if (this.hour12Timer && this.isPM && hours >= 1 && hours <= 11) {\r\n hours = hours + 12;\r\n } else if (this.hour12Timer && !this.isPM && hours === 12) {\r\n hours = 0;\r\n }\r\n\r\n this.setHourValue(hours);\r\n }\r\n\r\n public setHourValue(hours: number): void {\r\n const m = this.dateTimeAdapter.setHours(this.pickerDateTime, hours);\r\n this.selectedChange.emit(m);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n public setMinuteValue(minutes: number): void {\r\n const m = this.dateTimeAdapter.setMinutes(this.pickerDateTime, minutes);\r\n this.selectedChange.emit(m);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n public setSecondValue(seconds: number): void {\r\n const m = this.dateTimeAdapter.setSeconds(this.pickerDateTime, seconds);\r\n this.selectedChange.emit(m);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n public setMeridiem(event: any): void {\r\n this.isPM = !this.isPM;\r\n\r\n let hours = this.hourValue;\r\n if (this.isPM) {\r\n hours = hours + 12;\r\n } else {\r\n hours = hours - 12;\r\n }\r\n\r\n if (hours >= 0 && hours <= 23) {\r\n this.setHourValue(hours);\r\n }\r\n\r\n this.cdRef.markForCheck();\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки увеличения часов\r\n */\r\n public upHourEnabled(): boolean {\r\n return (\r\n this.maxDateTime == null ||\r\n this.compareHours(this.stepHour, this.maxDateTime) < 1\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки уменьшения часов\r\n */\r\n public downHourEnabled(): boolean {\r\n return (\r\n this.minDateTime == null ||\r\n this.compareHours(-this.stepHour, this.minDateTime) > -1\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки увеличения минут\r\n */\r\n public upMinuteEnabled(): boolean {\r\n return (\r\n this.maxDateTime == null ||\r\n this.compareMinutes(this.stepMinute, this.maxDateTime) < 1\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки уменьшения минут\r\n */\r\n public downMinuteEnabled(): boolean {\r\n return (\r\n this.minDateTime == null ||\r\n this.compareMinutes(-this.stepMinute, this.minDateTime) > -1\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки увеличения секунд\r\n */\r\n public upSecondEnabled(): boolean {\r\n return (\r\n this.maxDateTime == null ||\r\n this.compareSeconds(this.stepSecond, this.maxDateTime) < 1\r\n );\r\n }\r\n\r\n /**\r\n * Проверяет доступность кнопки уменьшения секунд\r\n */\r\n public downSecondEnabled(): boolean {\r\n return (\r\n this.minDateTime == null ||\r\n this.compareSeconds(-this.stepSecond, this.minDateTime) > -1\r\n );\r\n }\r\n\r\n /**\r\n * Изменяет отображаемый час и сравнивает результат с указанной датой\r\n * 1 — позже comparedDate\r\n * -1 — раньше comparedDate\r\n * 0 — совпадает с comparedDate\r\n * */\r\n private compareHours(amount: number, comparedDate: T): number {\r\n const hours = this.dateTimeAdapter.getHours(this.pickerDateTime) + amount;\r\n const result = this.dateTimeAdapter.setHours(this.pickerDateTime, hours);\r\n return this.dateTimeAdapter.compare(result, comparedDate);\r\n }\r\n\r\n /**\r\n * Изменяет отображаемую минуту и сравнивает результат с указанной датой\r\n * 1 — позже comparedDate\r\n * -1 — раньше comparedDate\r\n * 0 — совпадает с comparedDate\r\n * */\r\n private compareMinutes(amount: number, comparedDate: T): number {\r\n const minutes =\r\n this.dateTimeAdapter.getMinutes(this.pickerDateTime) + amount;\r\n const result = this.dateTimeAdapter.setMinutes(\r\n this.pickerDateTime,\r\n minutes\r\n );\r\n return this.dateTimeAdapter.compare(result, comparedDate);\r\n }\r\n\r\n /**\r\n * Изменяет отображаемую секунду и сравнивает результат с указанной датой\r\n * 1 — позже comparedDate\r\n * -1 — раньше comparedDate\r\n * 0 — совпадает с comparedDate\r\n * */\r\n private compareSeconds(amount: number, comparedDate: T): number {\r\n const seconds =\r\n this.dateTimeAdapter.getSeconds(this.pickerDateTime) + amount;\r\n const result = this.dateTimeAdapter.setSeconds(\r\n this.pickerDateTime,\r\n seconds\r\n );\r\n return this.dateTimeAdapter.compare(result, comparedDate);\r\n }\r\n\r\n /**\r\n * Возвращает корректный объект даты\r\n */\r\n private getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n}\r\n","<owl-date-time-timer-box\r\n [upBtnAriaLabel]=\"upHourButtonLabel\"\r\n [downBtnAriaLabel]=\"downHourButtonLabel\"\r\n [upBtnDisabled]=\"!upHourEnabled()\"\r\n [downBtnDisabled]=\"!downHourEnabled()\"\r\n [boxValue]=\"hourBoxValue\"\r\n [value]=\"hourValue\"\r\n [min]=\"0\"\r\n [max]=\"23\"\r\n [step]=\"stepHour\"\r\n [inputLabel]=\"'Hour'\"\r\n (inputChange)=\"setHourValueViaInput($event)\"\r\n (valueChange)=\"setHourValue($event)\"\r\n></owl-date-time-timer-box>\r\n<owl-date-time-timer-box\r\n [showDivider]=\"true\"\r\n [upBtnAriaLabel]=\"upMinuteButtonLabel\"\r\n [downBtnAriaLabel]=\"downMinuteButtonLabel\"\r\n [upBtnDisabled]=\"!upMinuteEnabled()\"\r\n [downBtnDisabled]=\"!downMinuteEnabled()\"\r\n [value]=\"minuteValue\"\r\n [min]=\"0\"\r\n [max]=\"59\"\r\n [step]=\"stepMinute\"\r\n [inputLabel]=\"'Minute'\"\r\n (inputChange)=\"setMinuteValue($event)\"\r\n (valueChange)=\"setMinuteValue($event)\"\r\n></owl-date-time-timer-box>\r\n@if (showSecondsTimer) {\r\n <owl-date-time-timer-box\r\n [showDivider]=\"true\"\r\n [upBtnAriaLabel]=\"upSecondButtonLabel\"\r\n [downBtnAriaLabel]=\"downSecondButtonLabel\"\r\n [upBtnDisabled]=\"!upSecondEnabled()\"\r\n [downBtnDisabled]=\"!downSecondEnabled()\"\r\n [value]=\"secondValue\"\r\n [min]=\"0\"\r\n [max]=\"59\"\r\n [step]=\"stepSecond\"\r\n [inputLabel]=\"'Second'\"\r\n (inputChange)=\"setSecondValue($event)\"\r\n (valueChange)=\"setSecondValue($event)\"\r\n ></owl-date-time-timer-box>\r\n}\r\n@if (hour12Timer) {\r\n <div class=\"owl-dt-timer-hour12\">\r\n <button\r\n class=\"owl-dt-control-button owl-dt-timer-hour12-box\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"setMeridiem($event)\"\r\n >\r\n <span class=\"owl-dt-control-button-content\" tabindex=\"-1\">\r\n {{ hour12ButtonLabel }}\r\n </span>\r\n </button>\r\n </div>\r\n}\r\n","/**\r\n * date-time-picker-container.component\r\n */\r\n\r\nimport { AfterContentInit, AfterViewInit, AnimationCallbackEvent, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, OnInit, Optional, ViewChild } from '@angular/core';\r\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\r\nimport { OwlCalendarComponent } from './calendar.component';\r\nimport { IDateTimePickerAnimationEvent } from './date-time-picker-animation-event';\r\nimport { OwlTimerComponent } from './timer.component';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { OwlDateTime, PickerType } from './date-time.class';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\r\n\r\n@Component({\r\n exportAs: 'owlDateTimeContainer',\r\n selector: 'owl-date-time-container',\r\n templateUrl: './date-time-picker-container.component.html',\r\n styleUrls: ['./date-time-picker-container.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n preserveWhitespaces: false,\r\n standalone: false,\r\n host: {\r\n '(animate.enter)': 'onAnimateEnter($event)',\r\n '(animate.leave)': 'onAnimateLeave($event)',\r\n '[class.owl-dt-container]': 'owlDTContainerClass',\r\n '[class.owl-dt-popup-container]': 'owlDTPopupContainerClass',\r\n '[class.owl-dt-dialog-container]': 'owlDTDialogContainerClass',\r\n '[class.owl-dt-inline-container]': 'owlDTInlineContainerClass',\r\n '[class.owl-dt-container-disabled]': 'owlDTContainerDisabledClass',\r\n '[attr.id]': 'owlDTContainerId',\r\n }\r\n})\r\nexport class OwlDateTimeContainerComponent<T>\r\n implements OnInit, AfterContentInit, AfterViewInit\r\n{\r\n @ViewChild(OwlCalendarComponent)\r\n calendar: OwlCalendarComponent<T>;\r\n @ViewChild(OwlTimerComponent)\r\n timer: OwlTimerComponent<T>;\r\n\r\n public picker: OwlDateTime<T>;\r\n public activeSelectedIndex = 0; // Индекс активной границы диапазона (0: 'from', 1: 'to')\r\n\r\n /** Событие изменения состояния анимации */\r\n public animationStateChanged = new EventEmitter<IDateTimePickerAnimationEvent>();\r\n\r\n // Сохраняем время начала и конца диапазона\r\n private retainStartTime: T;\r\n private retainEndTime: T;\r\n\r\n /**\r\n * Поток запросов на закрытие компонента выбора\r\n * */\r\n private hidePicker$ = new Subject<any>();\r\n\r\n get hidePickerStream(): Observable<any> {\r\n return this.hidePicker$.asObservable();\r\n }\r\n\r\n /**\r\n * Поток запросов на подтверждение выбранного значения\r\n * */\r\n private confirmSelected$ = new Subject<any>();\r\n\r\n get confirmSelectedStream(): Observable<any> {\r\n return this.confirmSelected$.asObservable();\r\n }\r\n\r\n private beforePickerOpened$ = new Subject<any>();\r\n\r\n get beforePickerOpenedStream(): Observable<any> {\r\n return this.beforePickerOpened$.asObservable();\r\n }\r\n\r\n private pickerOpened$ = new Subject<any>();\r\n\r\n get pickerOpenedStream(): Observable<any> {\r\n return this.pickerOpened$.asObservable();\r\n }\r\n\r\n /**\r\n * Текущее значение компонента выбора определяет отображаемый период и дату,\r\n * выделенную при навигации с клавиатуры\r\n */\r\n private _clampedPickerDateTime: T;\r\n\r\n get pickerDateTime() {\r\n return this._clampedPickerDateTime;\r\n }\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n private elmRef: ElementRef,\r\n private pickerIntl: OwlDateTimeIntl,\r\n @Optional() private dateTimeAdapter: DateTimeAdapter<T>,\r\n ) {\r\n this.pickerIntl.changes.pipe(takeUntilDestroyed())\r\n .subscribe(() => this.cdRef.markForCheck());\r\n }\r\n\r\n get pickerType(): PickerType {\r\n return this.picker.pickerType;\r\n }\r\n\r\n get cancelLabel(): string {\r\n return this.pickerIntl.cancelBtnLabel;\r\n }\r\n\r\n get setLabel(): string {\r\n return this.pickerIntl.setBtnLabel;\r\n }\r\n\r\n set pickerDateTime(value: T) {\r\n if (value != null) {\r\n this._clampedPickerDateTime = this.dateTimeAdapter.clampDate(\r\n value,\r\n this.picker.minDateTime,\r\n this.picker.maxDateTime,\r\n );\r\n }\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n /**\r\n * Подпись начала диапазона ('from')\r\n * */\r\n get fromLabel(): string {\r\n return this.pickerIntl.rangeFromLabel;\r\n }\r\n\r\n /**\r\n * Подпись конца диапазона ('to')\r\n * */\r\n get toLabel(): string {\r\n return this.pickerIntl.rangeToLabel;\r\n }\r\n\r\n /**\r\n * Отформатированное значение начала диапазона ('from')\r\n * */\r\n get fromFormattedValue(): string {\r\n const value = this.picker.selecteds[0];\r\n return value != null\r\n ? this.dateTimeAdapter.format(value, this.picker.formatString)\r\n : '';\r\n }\r\n\r\n /**\r\n * Отформатированное значение конца диапазона ('to')\r\n * */\r\n get toFormattedValue(): string {\r\n const value = this.picker.selecteds[1];\r\n return value != null\r\n ? this.dateTimeAdapter.format(value, this.picker.formatString)\r\n : '';\r\n }\r\n\r\n get containerElm(): HTMLElement {\r\n return this.elmRef.nativeElement;\r\n }\r\n\r\n get owlDTContainerClass(): boolean {\r\n return true;\r\n }\r\n\r\n get owlDTPopupContainerClass(): boolean {\r\n return this.picker.pickerMode === 'popup';\r\n }\r\n\r\n get owlDTDialogContainerClass(): boolean {\r\n return this.picker.pickerMode === 'dialog';\r\n }\r\n\r\n get owlDTInlineContainerClass(): boolean {\r\n return this.picker.pickerMode === 'inline';\r\n }\r\n\r\n get owlDTContainerDisabledClass(): boolean {\r\n return this.picker.disabled;\r\n }\r\n\r\n get owlDTContainerId(): string {\r\n return this.picker.id;\r\n }\r\n\r\n get owlDTContainerAnimation(): any {\r\n return this.picker.pickerMode === 'inline' ? '' : 'enter';\r\n }\r\n\r\n /**\r\n * Условия отображения кнопок управления:\r\n * 1) Режим компонента — 'dialog'\r\n * 2) Тип компонента отличается от 'calendar', а режим — от 'inline'\r\n * */\r\n get showControlButtons(): boolean {\r\n return (\r\n this.picker.pickerMode === 'dialog' ||\r\n (this.picker.pickerType !== 'calendar' &&\r\n this.picker.pickerMode !== 'inline')\r\n );\r\n }\r\n\r\n public refreshView(): void {\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n public ngOnInit() {\r\n if (this.picker.selectMode === 'range') {\r\n if (this.picker.selecteds[0] != null) {\r\n this.retainStartTime = this.dateTimeAdapter.clone(\r\n this.picker.selecteds[0],\r\n );\r\n }\r\n if (this.picker.selecteds[1] != null) {\r\n this.retainEndTime = this.dateTimeAdapter.clone(\r\n this.picker.selecteds[1],\r\n );\r\n }\r\n }\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.initPicker();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.focusPicker();\r\n }\r\n\r\n public handleContainerAnimationStart(animationName: 'enter' | 'leave'): void {\r\n if (animationName === 'enter') {\r\n this.beforePickerOpened$.next(null);\r\n }\r\n this.animationStateChanged.emit({\r\n phaseName: 'start',\r\n toState: animationName\r\n });\r\n }\r\n\r\n public handleContainerAnimationDone(animationName: 'enter' | 'leave'): void {\r\n if (animationName === 'enter') {\r\n this.pickerOpened$.next(null);\r\n }\r\n this.animationStateChanged.emit({\r\n phaseName: 'done',\r\n toState: animationName\r\n });\r\n }\r\n\r\n public dateSelected(date: T): void {\r\n if (this.picker.disabled) {\r\n return;\r\n }\r\n let result;\r\n\r\n if (this.picker.isInSingleMode) {\r\n result = this.dateSelectedInSingleMode(date);\r\n if (result != null) {\r\n this.pickerDateTime = result;\r\n this.picker.select(result);\r\n } else {\r\n // Закрываем компонент выбора, если result равен null и pickerType равен 'calendar'\r\n if (this.pickerType === 'calendar') {\r\n this.hidePicker$.next(null);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (this.picker.isInRangeMode) {\r\n result = this.dateSelectedInRangeMode(date);\r\n if (result != null) {\r\n this.pickerDateTime = result[this.activeSelectedIndex];\r\n this.picker.select(result);\r\n }\r\n }\r\n }\r\n\r\n public timeSelected(time: T): void {\r\n if (this.picker.disabled) {\r\n return;\r\n }\r\n this.pickerDateTime = this.dateTimeAdapter.clone(time);\r\n\r\n if (!this.picker.dateTimeChecker(this.pickerDateTime)) {\r\n return;\r\n }\r\n\r\n if (this.picker.isInSingleMode) {\r\n this.picker.select(this.pickerDateTime);\r\n return;\r\n }\r\n\r\n if (this.picker.isInRangeMode) {\r\n const selecteds = [...this.picker.selecteds];\r\n\r\n // Проверяем, находится ли начало диапазона после конца или конец перед началом\r\n // В этом случае задаём обеим границам диапазона одинаковое значение\r\n if (\r\n (this.activeSelectedIndex === 0 &&\r\n selecteds[1] != null &&\r\n this.dateTimeAdapter.compare(\r\n this.pickerDateTime,\r\n selecteds[1],\r\n ) === 1) ||\r\n (this.activeSelectedIndex === 1 &&\r\n selecteds[0] != null &&\r\n this.dateTimeAdapter.compare(\r\n this.pickerDateTime,\r\n selecteds[0],\r\n ) === -1)\r\n ) {\r\n selecteds[0] = this.pickerDateTime;\r\n selecteds[1] = this.pickerDateTime;\r\n } else {\r\n selecteds[this.activeSelectedIndex] = this.pickerDateTime;\r\n }\r\n\r\n if (selecteds[0] != null) {\r\n this.retainStartTime = this.dateTimeAdapter.clone(selecteds[0]);\r\n }\r\n if (selecteds[1] != null) {\r\n this.retainEndTime = this.dateTimeAdapter.clone(selecteds[1]);\r\n }\r\n this.picker.select(selecteds);\r\n }\r\n }\r\n\r\n /**\r\n * Обрабатывает нажатие кнопки отмены\r\n */\r\n public onCancelClicked(event: any): void {\r\n this.hidePicker$.next(null);\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n /**\r\n * Обрабатывает нажатие кнопки подтверждения\r\n */\r\n public onSetClicked(event: any): void {\r\n if (this.picker.disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n if (!this.picker.dateTimeChecker(this.pickerDateTime)) {\r\n this.hidePicker$.next(null);\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n this.confirmSelected$.next(event);\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор границы диапазона в группе переключателей\r\n */\r\n public handleClickOnInfoGroup(event: any, index: number): void {\r\n this.setActiveSelectedIndex(index);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n /**\r\n * Обрабатывает выбор границы диапазона в группе переключателей\r\n */\r\n public handleKeydownOnInfoGroup(\r\n event: any,\r\n next: any,\r\n index: number,\r\n ): void {\r\n switch (event.keyCode) {\r\n case DOWN_ARROW:\r\n case RIGHT_ARROW:\r\n case UP_ARROW:\r\n case LEFT_ARROW:\r\n next.focus();\r\n this.setActiveSelectedIndex(index === 0 ? 1 : 0);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n\r\n case SPACE:\r\n this.setActiveSelectedIndex(index);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n }\r\n\r\n protected onAnimateEnter(event: AnimationCallbackEvent): void {\r\n this.handleContainerAnimationStart('enter');\r\n const duration = this.parseCssVariableDuration(event.target, '--container-enter-animation-duration');\r\n if (duration === 0) {\r\n this.handleContainerAnimationDone('enter');\r\n event.animationComplete();\r\n } else {\r\n const animation = event.target.animate([\r\n { opacity: 0, transform: 'scaleY(0)' },\r\n { opacity: 1, transform: 'scaleY(1)' }\r\n ], {\r\n duration: duration ?? 400,\r\n easing: 'cubic-bezier(0.25, 0.8, 0.25, 1)',\r\n fill: 'forwards'\r\n });\r\n const complete = () => {\r\n this.handleContainerAnimationDone('enter');\r\n event.animationComplete();\r\n };\r\n animation.finished.then(complete, complete);\r\n }\r\n }\r\n\r\n protected onAnimateLeave(event: AnimationCallbackEvent): void {\r\n this.handleContainerAnimationStart('leave');\r\n const duration = this.parseCssVariableDuration(event.target, '--container-leave-animation-duration');\r\n if (duration === 0) {\r\n this.handleContainerAnimationDone('leave');\r\n event.animationComplete();\r\n } else {\r\n const animation = event.target.animate([\r\n { opacity: 1 },\r\n { opacity: 0 }\r\n ], {\r\n duration: duration ?? 100,\r\n easing: 'linear',\r\n fill: 'forwards'\r\n });\r\n const complete = () => {\r\n this.handleContainerAnimationDone('leave');\r\n event.animationComplete();\r\n };\r\n animation.finished.then(complete, complete);\r\n }\r\n }\r\n\r\n /**\r\n * Задаёт значение activeSelectedIndex\r\n */\r\n private setActiveSelectedIndex(index: number): void {\r\n if (\r\n this.picker.selectMode === 'range' &&\r\n this.activeSelectedIndex !== index\r\n ) {\r\n this.activeSelectedIndex = index;\r\n\r\n const selected = this.picker.selecteds[this.activeSelectedIndex];\r\n if (this.picker.selecteds && selected != null) {\r\n this.pickerDateTime = this.dateTimeAdapter.clone(selected);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n private initPicker(): void {\r\n this.pickerDateTime = this.picker.startAt ?? this.dateTimeAdapter.now();\r\n this.activeSelectedIndex = this.picker.selectMode === 'rangeTo' ? 1 : 0;\r\n }\r\n\r\n /**\r\n * Выбирает дату календаря в режиме single\r\n * Возвращает null, если дата не выбрана\r\n */\r\n private dateSelectedInSingleMode(date: T): T | null {\r\n if (this.dateTimeAdapter.isSameDay(date, this.picker.selected)) {\r\n return null;\r\n }\r\n\r\n return this.updateAndCheckCalendarDate(date);\r\n }\r\n\r\n /**\r\n * Выбирает даты в режиме диапазона\r\n */\r\n private dateSelectedInRangeMode(date: T): T[] | null {\r\n let from = this.picker.selecteds[0];\r\n let to = this.picker.selecteds[1];\r\n\r\n const result = this.updateAndCheckCalendarDate(date);\r\n\r\n if (result == null) {\r\n return null;\r\n }\r\n\r\n // Если указанный день совпадает с началом диапазона или находится после него,\r\n // задаём его как конец диапазона ('to')\r\n // Иначе задаём его как начало диапазона ('from'), а конец ('to') сбрасываем в null\r\n if (this.picker.selectMode === 'range') {\r\n if (\r\n this.picker.selecteds &&\r\n this.picker.selecteds.length &&\r\n to == null &&\r\n from != null &&\r\n this.dateTimeAdapter.differenceInCalendarDays(result, from) >= 0\r\n ) {\r\n if (this.picker.endAt != null && this.retainEndTime == null) {\r\n to = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(result),\r\n this.dateTimeAdapter.getMonth(result),\r\n this.dateTimeAdapter.getDate(result),\r\n this.dateTimeAdapter.getHours(this.picker.endAt),\r\n this.dateTimeAdapter.getMinutes(this.picker.endAt),\r\n this.dateTimeAdapter.getSeconds(this.picker.endAt),\r\n );\r\n } else if (this.retainEndTime != null) {\r\n to = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(result),\r\n this.dateTimeAdapter.getMonth(result),\r\n this.dateTimeAdapter.getDate(result),\r\n this.dateTimeAdapter.getHours(this.retainEndTime),\r\n this.dateTimeAdapter.getMinutes(this.retainEndTime),\r\n this.dateTimeAdapter.getSeconds(this.retainEndTime),\r\n );\r\n } else {\r\n to = result;\r\n }\r\n this.activeSelectedIndex = 1;\r\n } else {\r\n if (this.picker.startAt != null && this.retainStartTime == null) {\r\n from = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(result),\r\n this.dateTimeAdapter.getMonth(result),\r\n this.dateTimeAdapter.getDate(result),\r\n this.dateTimeAdapter.getHours(this.picker.startAt),\r\n this.dateTimeAdapter.getMinutes(this.picker.startAt),\r\n this.dateTimeAdapter.getSeconds(this.picker.startAt),\r\n );\r\n } else if (this.retainStartTime != null) {\r\n from = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(result),\r\n this.dateTimeAdapter.getMonth(result),\r\n this.dateTimeAdapter.getDate(result),\r\n this.dateTimeAdapter.getHours(this.retainStartTime),\r\n this.dateTimeAdapter.getMinutes(this.retainStartTime),\r\n this.dateTimeAdapter.getSeconds(this.retainStartTime),\r\n );\r\n } else {\r\n from = result;\r\n }\r\n to = null;\r\n this.activeSelectedIndex = 0;\r\n }\r\n } else if (this.picker.selectMode === 'rangeFrom') {\r\n from = result;\r\n\r\n // Если начало диапазона находится после конца, сбрасываем конец в null\r\n if (to != null && this.dateTimeAdapter.compare(from, to) > 0) {\r\n to = null;\r\n }\r\n } else if (this.picker.selectMode === 'rangeTo') {\r\n to = result;\r\n\r\n // Если начало диапазона находится после конца, сбрасываем начало в null\r\n if (from != null && this.dateTimeAdapter.compare(from, to) > 0) {\r\n from = null;\r\n }\r\n }\r\n\r\n // Сохранённое время может выходить за min/max, даже если день доступен для выбора\r\n const selected = this.dateTimeAdapter.clampDate(\r\n this.activeSelectedIndex === 0 ? from : to,\r\n this.picker.minDateTime,\r\n this.picker.maxDateTime\r\n );\r\n if (!this.picker.dateTimeChecker(selected)) {\r\n return null;\r\n }\r\n if (this.activeSelectedIndex === 0) {\r\n from = selected;\r\n } else {\r\n to = selected;\r\n }\r\n return [from, to];\r\n }\r\n\r\n /**\r\n * Обновляет время указанной даты календаря и проверяет её допустимость\r\n * Поскольку время даты календаря по умолчанию равно 00:00:00, в режиме 'both'\r\n * перед выбором даты необходимо обновить её время\r\n * Если дата допустима, возвращает обновлённое значение dateTime\r\n * Если дата недопустима, возвращает null\r\n */\r\n private updateAndCheckCalendarDate(date: T): T {\r\n let result;\r\n\r\n // В режиме 'both' обновляем время даты календаря\r\n if (this.picker.pickerType === 'both') {\r\n result = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(date),\r\n this.dateTimeAdapter.getMonth(date),\r\n this.dateTimeAdapter.getDate(date),\r\n this.dateTimeAdapter.getHours(this.pickerDateTime),\r\n this.dateTimeAdapter.getMinutes(this.pickerDateTime),\r\n this.dateTimeAdapter.getSeconds(this.pickerDateTime),\r\n );\r\n result = this.dateTimeAdapter.clampDate(\r\n result,\r\n this.picker.minDateTime,\r\n this.picker.maxDateTime,\r\n );\r\n } else {\r\n result = this.dateTimeAdapter.clone(date);\r\n }\r\n\r\n // Проверяем обновлённое значение dateTime\r\n return this.picker.dateTimeChecker(result) ? result : null;\r\n }\r\n\r\n /**\r\n * Переводит фокус на компонент выбора\r\n * */\r\n private focusPicker(): void {\r\n if (this.picker.pickerMode === 'inline') {\r\n return;\r\n }\r\n\r\n if (this.calendar) {\r\n this.calendar.focusActiveCell();\r\n } else if (this.timer) {\r\n this.timer.focus();\r\n }\r\n }\r\n\r\n private parseCssVariableDuration(el: Element, cssVariableName: string) {\r\n const durationStr = getComputedStyle(el).getPropertyValue(cssVariableName).trim();\r\n\r\n // Переводим в миллисекунды\r\n let duration: number | undefined = undefined;\r\n if (durationStr.endsWith('ms')) {\r\n duration = parseFloat(durationStr);\r\n } else if (durationStr.endsWith('s')) {\r\n duration = parseFloat(durationStr) * 1000;\r\n } else if (durationStr) {\r\n duration = parseFloat(durationStr);\r\n if (isNaN(duration)) {\r\n duration = undefined;\r\n }\r\n }\r\n return duration;\r\n }\r\n}\r\n","<div\r\n [cdkTrapFocus]=\"picker.pickerMode !== 'inline'\"\r\n class=\"owl-dt-container-inner\"\r\n>\r\n @if (pickerType === 'both' || pickerType === 'calendar') {\r\n <owl-date-time-calendar\r\n class=\"owl-dt-container-row\"\r\n [firstDayOfWeek]=\"picker.firstDayOfWeek\"\r\n [(pickerDateTime)]=\"pickerDateTime\"\r\n [selected]=\"picker.selected\"\r\n [selecteds]=\"picker.selecteds\"\r\n [selectMode]=\"picker.selectMode\"\r\n [minDate]=\"picker.minDateTime\"\r\n [maxDate]=\"picker.maxDateTime\"\r\n [dateFilter]=\"picker.dateTimeFilter\"\r\n [startView]=\"picker.startView\"\r\n [yearOnly]=\"picker.yearOnly\"\r\n [showCalendarWeeks]=\"picker.showCalendarWeeks\"\r\n [multiyearOnly]=\"picker.multiyearOnly\"\r\n [hideOtherMonths]=\"picker.hideOtherMonths\"\r\n (yearSelected)=\"picker.selectYear($event)\"\r\n (monthSelected)=\"picker.selectMonth($event)\"\r\n (dateClicked)=\"picker.selectDate($event)\"\r\n (selectedChange)=\"dateSelected($event)\"\r\n ></owl-date-time-calendar>\r\n }\r\n @if (pickerType === 'both' || pickerType === 'timer') {\r\n <owl-date-time-timer\r\n class=\"owl-dt-container-row\"\r\n [pickerDateTime]=\"pickerDateTime\"\r\n [minDateTime]=\"picker.minDateTime\"\r\n [maxDateTime]=\"picker.maxDateTime\"\r\n [showSecondsTimer]=\"picker.showSecondsTimer\"\r\n [hour12Timer]=\"picker.hour12Timer\"\r\n [stepHour]=\"picker.stepHour\"\r\n [stepMinute]=\"picker.stepMinute\"\r\n [stepSecond]=\"picker.stepSecond\"\r\n (selectedChange)=\"timeSelected($event)\"\r\n ></owl-date-time-timer>\r\n }\r\n @if (picker.isInRangeMode) {\r\n <div\r\n role=\"radiogroup\"\r\n class=\"owl-dt-container-info owl-dt-container-row\"\r\n >\r\n <div\r\n role=\"radio\"\r\n [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\"\r\n [attr.aria-checked]=\"activeSelectedIndex === 0\"\r\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-from\"\r\n [ngClass]=\"{\r\n 'owl-dt-container-info-active': activeSelectedIndex === 0,\r\n }\"\r\n (click)=\"handleClickOnInfoGroup($event, 0)\"\r\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\r\n #from\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-container-range-content\"\r\n tabindex=\"-1\"\r\n >\r\n <span class=\"owl-dt-container-info-label\"\r\n >{{ fromLabel }}:</span\r\n >\r\n <span class=\"owl-dt-container-info-value\">{{\r\n fromFormattedValue\r\n }}</span>\r\n </span>\r\n </div>\r\n <div\r\n role=\"radio\"\r\n [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\"\r\n [attr.aria-checked]=\"activeSelectedIndex === 1\"\r\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-to\"\r\n [ngClass]=\"{\r\n 'owl-dt-container-info-active': activeSelectedIndex === 1,\r\n }\"\r\n (click)=\"handleClickOnInfoGroup($event, 1)\"\r\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\r\n #to\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-container-range-content\"\r\n tabindex=\"-1\"\r\n >\r\n <span class=\"owl-dt-container-info-label\"\r\n >{{ toLabel }}:</span\r\n >\r\n <span class=\"owl-dt-container-info-value\">{{\r\n toFormattedValue\r\n }}</span>\r\n </span>\r\n </div>\r\n </div>\r\n }\r\n @if (showControlButtons) {\r\n <div class=\"owl-dt-container-buttons owl-dt-container-row\">\r\n <button\r\n class=\"owl-dt-control owl-dt-control-button owl-dt-container-control-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onCancelClicked($event)\"\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-control-button-content\"\r\n tabindex=\"-1\"\r\n >\r\n {{ cancelLabel }}\r\n </span>\r\n </button>\r\n <button\r\n class=\"owl-dt-control owl-dt-control-button owl-dt-container-control-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onSetClicked($event)\"\r\n >\r\n <span\r\n class=\"owl-dt-control-content owl-dt-control-button-content\"\r\n tabindex=\"-1\"\r\n >\r\n {{ setLabel }}\r\n </span>\r\n </button>\r\n </div>\r\n }\r\n</div>\r\n","/**\r\n * dialog-config.class\r\n */\r\nimport { ViewContainerRef } from '@angular/core';\r\nimport { NoopScrollStrategy, ScrollStrategy } from '@angular/cdk/overlay';\r\n\r\nlet uniqueId = 0;\r\n\r\n/** Возможные переопределения положения диалогового окна */\r\nexport interface DialogPosition {\r\n /** Переопределение отступа диалогового окна сверху */\r\n top?: string;\r\n\r\n /** Переопределение отступа диалогового окна снизу */\r\n bottom?: string;\r\n\r\n /** Переопределение отступа диалогового окна слева */\r\n left?: string;\r\n\r\n /** Переопределение отступа диалогового окна справа */\r\n right?: string;\r\n}\r\n\r\nexport interface OwlDialogConfigInterface {\r\n /**\r\n * ID элемента с описанием диалогового окна\r\n */\r\n ariaDescribedBy?: string | null;\r\n\r\n /**\r\n * Нужно ли переводить фокус на диалоговое окно при открытии\r\n */\r\n autoFocus?: boolean;\r\n\r\n /** Есть ли у диалогового окна фон */\r\n hasBackdrop?: boolean;\r\n\r\n /**\r\n * Пользовательский стиль фона\r\n * */\r\n backdropStyle?: any;\r\n\r\n /** Данные, передаваемые в дочерний компонент через DI */\r\n data?: any ;\r\n\r\n /** Может ли пользователь закрыть диалоговое окно клавишей Escape или нажатием за его пределами */\r\n disableClose?: boolean;\r\n\r\n /**\r\n * ID диалогового окна; если не указан, создаётся уникальный ID\r\n */\r\n id?: string;\r\n\r\n /**\r\n * ARIA-роль элемента диалогового окна\r\n */\r\n role?: 'dialog' | 'alertdialog';\r\n\r\n /**\r\n * Пользовательский класс панели\r\n * */\r\n paneClass?: string | string[];\r\n\r\n /**\r\n * Событие мыши\r\n * */\r\n event?: MouseEvent;\r\n\r\n /**\r\n * Пользовательский класс фона\r\n * */\r\n backdropClass?: string | string[];\r\n\r\n /**\r\n * Нужно ли закрывать диалоговое окно при переходе назад или вперёд в истории браузера\r\n * */\r\n closeOnNavigation?: boolean;\r\n\r\n /** Ширина диалогового окна */\r\n width?: string ;\r\n\r\n /** Высота диалогового окна */\r\n height?: string;\r\n\r\n /**\r\n * Минимальная ширина overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n minWidth?: number | string;\r\n\r\n /**\r\n * Минимальная высота overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n minHeight?: number | string;\r\n\r\n /**\r\n * Максимальная ширина overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n maxWidth?: number | string;\r\n\r\n /**\r\n * Максимальная высота overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n maxHeight?: number | string;\r\n\r\n /** Переопределения положения */\r\n position?: DialogPosition;\r\n\r\n /**\r\n * Стратегия прокрутки при открытом диалоговом окне\r\n * Подробнее: https://material.angular.io/cdk/overlay/overview#scroll-strategies\r\n * */\r\n scrollStrategy?: ScrollStrategy;\r\n\r\n viewContainerRef?: ViewContainerRef;\r\n}\r\n\r\nexport class OwlDialogConfig implements OwlDialogConfigInterface {\r\n /**\r\n * ID элемента с описанием диалогового окна\r\n */\r\n public ariaDescribedBy: string | null = null;\r\n\r\n /**\r\n * Нужно ли переводить фокус на диалоговое окно при открытии\r\n */\r\n public autoFocus = true;\r\n\r\n /** Есть ли у диалогового окна фон */\r\n public hasBackdrop = true;\r\n\r\n /**\r\n * Пользовательский стиль фона\r\n * */\r\n public backdropStyle: any;\r\n\r\n /** Данные, передаваемые в дочерний компонент через DI */\r\n public data: any = null;\r\n\r\n /** Может ли пользователь закрыть диалоговое окно клавишей Escape или нажатием за его пределами */\r\n public disableClose = false;\r\n\r\n /**\r\n * ID диалогового окна; если не указан, создаётся уникальный ID\r\n */\r\n public id: string;\r\n\r\n /**\r\n * ARIA-роль элемента диалогового окна\r\n */\r\n public role: 'dialog' | 'alertdialog' = 'dialog';\r\n\r\n /**\r\n * Пользовательский класс панели\r\n * */\r\n public paneClass: string | string[] = '';\r\n\r\n /**\r\n * Событие мыши\r\n * */\r\n public event: MouseEvent = null;\r\n\r\n /**\r\n * Пользовательский класс фона\r\n * */\r\n public backdropClass: string | string[] = '';\r\n\r\n /**\r\n * Нужно ли закрывать диалоговое окно при переходе назад или вперёд в истории браузера\r\n * */\r\n public closeOnNavigation = true;\r\n\r\n /** Ширина диалогового окна */\r\n public width = '';\r\n\r\n /** Высота диалогового окна */\r\n public height = '';\r\n\r\n /**\r\n * Минимальная ширина overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n public minWidth: number | string;\r\n\r\n /**\r\n * Минимальная высота overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n public minHeight: number | string;\r\n\r\n /**\r\n * Максимальная ширина overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n public maxWidth: number | string = '85vw';\r\n\r\n /**\r\n * Максимальная высота overlay-панели\r\n * Числовое значение задаётся в пикселях\r\n * */\r\n public maxHeight: number | string;\r\n\r\n /** Переопределения положения */\r\n public position: DialogPosition;\r\n\r\n /**\r\n * Стратегия прокрутки при открытом диалоговом окне\r\n * Подробнее: https://material.angular.io/cdk/overlay/overview#scroll-strategies\r\n * */\r\n public scrollStrategy: ScrollStrategy = new NoopScrollStrategy();\r\n\r\n public viewContainerRef: ViewContainerRef;\r\n\r\n constructor() {\r\n this.id = `owl-dialog-${uniqueId++}`;\r\n }\r\n}\r\n","/**\r\n * dialog-ref.class\r\n */\r\nimport { ESCAPE } from '@angular/cdk/keycodes';\r\nimport { GlobalPositionStrategy, OverlayRef } from '@angular/cdk/overlay';\r\nimport { Location } from '@angular/common';\r\nimport { Signal, signal } from '@angular/core';\r\nimport { filter, Observable, Subject, Subscription, SubscriptionLike, take } from 'rxjs';\r\nimport { IDateTimePickerAnimationEvent } from '../date-time/date-time-picker-animation-event';\r\nimport { DialogPosition } from './dialog-config.class';\r\nimport { OwlDialogContainerComponent } from './dialog-container.component';\r\n\r\nexport class OwlDialogRef<T> {\r\n\r\n private result: any;\r\n /**\r\n * Экземпляр компонента, открытого в диалоговом окне\r\n * */\r\n public componentInstance = signal<T | undefined>(undefined);\r\n\r\n private _beforeClose$ = new Subject<any>();\r\n\r\n private _beforeOpen$ = new Subject<any>();\r\n\r\n private _afterOpen$ = new Subject<any>();\r\n\r\n private _afterClosed$ = new Subject<any>();\r\n /** Разрешено ли пользователю закрывать диалоговое окно */\r\n public disableClose = true;\r\n private closing = false;\r\n /** Подписка на изменения адреса в браузере */\r\n private locationChanged: SubscriptionLike = Subscription.EMPTY;\r\n\r\n constructor(private overlayRef: OverlayRef,\r\n private container: OwlDialogContainerComponent,\r\n public readonly id: string,\r\n location?: Location) {\r\n this.disableClose = this.container.config.disableClose;\r\n\r\n this.container.animationStateChanged\r\n .pipe(\r\n filter(( event: IDateTimePickerAnimationEvent ) => event.phaseName === 'start' && event.toState === 'enter'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this._beforeOpen$.next(null);\r\n this._beforeOpen$.complete();\r\n });\r\n\r\n this.container.animationStateChanged\r\n .pipe(\r\n filter(( event: IDateTimePickerAnimationEvent ) => event.phaseName === 'done' && event.toState === 'enter'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this._afterOpen$.next(null);\r\n this._afterOpen$.complete();\r\n });\r\n\r\n this.container.animationStateChanged\r\n .pipe(\r\n filter((event: IDateTimePickerAnimationEvent) => event.phaseName === 'done' && event.toState === 'leave'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this.overlayRef.dispose();\r\n this.locationChanged.unsubscribe();\r\n this._afterClosed$.next(this.result);\r\n this._afterClosed$.complete();\r\n this._beforeOpen$.complete();\r\n this._afterOpen$.complete();\r\n this._beforeClose$.complete();\r\n this.componentInstance.set(undefined);\r\n });\r\n\r\n this.overlayRef.keydownEvents()\r\n .pipe(filter(event => event.keyCode === ESCAPE && !this.disableClose))\r\n .subscribe(() => this.close());\r\n\r\n if (location) {\r\n this.locationChanged = location.subscribe(() => {\r\n if (this.container.config.closeOnNavigation) {\r\n this.close();\r\n }\r\n });\r\n }\r\n }\r\n\r\n public close(dialogResult?: any) {\r\n if (this.closing) {\r\n return;\r\n }\r\n this.closing = true;\r\n this.result = dialogResult;\r\n\r\n this.container.animationStateChanged\r\n .pipe(\r\n filter(event => event.phaseName === 'start' && event.toState === 'leave'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this._beforeClose$.next(dialogResult);\r\n this._beforeClose$.complete();\r\n this.overlayRef.detachBackdrop();\r\n });\r\n\r\n this.container.startExitAnimation();\r\n }\r\n\r\n /**\r\n * Возвращает Observable нажатий на фон overlay\r\n */\r\n public backdropClick(): Observable<any> {\r\n return this.overlayRef.backdropClick();\r\n }\r\n\r\n /**\r\n * Возвращает Observable событий keydown, направленных на overlay\r\n */\r\n public keydownEvents(): Observable<KeyboardEvent> {\r\n return this.overlayRef.keydownEvents();\r\n }\r\n\r\n /**\r\n * Обновляет положение диалогового окна\r\n * @param position Новое положение диалогового окна\r\n */\r\n public updatePosition(position?: DialogPosition): this {\r\n const strategy = this.getPositionStrategy();\r\n\r\n if (position && (position.left || position.right)) {\r\n position.left ? strategy.left(position.left) : strategy.right(position.right);\r\n } else {\r\n strategy.centerHorizontally();\r\n }\r\n\r\n if (position && (position.top || position.bottom)) {\r\n position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\r\n } else {\r\n strategy.centerVertically();\r\n }\r\n\r\n this.overlayRef.updatePosition();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Обновляет ширину и высоту диалогового окна\r\n * @param width Новая ширина диалогового окна\r\n * @param height Новая высота диалогового окна\r\n */\r\n updateSize(width: string = 'auto', height: string = 'auto'): this {\r\n this.getPositionStrategy().width(width).height(height);\r\n this.overlayRef.updatePosition();\r\n return this;\r\n }\r\n\r\n public isAnimating(): Signal<boolean> {\r\n return this.container.isAnimating;\r\n }\r\n\r\n public beforeOpen(): Observable<any> {\r\n return this._beforeOpen$.asObservable();\r\n }\r\n\r\n public afterOpen(): Observable<any> {\r\n return this._afterOpen$.asObservable();\r\n }\r\n\r\n public beforeClose(): Observable<any> {\r\n return this._beforeClose$.asObservable();\r\n }\r\n\r\n public afterClosed(): Observable<any> {\r\n return this._afterClosed$.asObservable();\r\n }\r\n\r\n /** Возвращает стратегию позиционирования из ссылки на overlay */\r\n private getPositionStrategy(): GlobalPositionStrategy {\r\n return this.overlayRef.getConfig().positionStrategy as GlobalPositionStrategy;\r\n }\r\n}\r\n","/**\r\n * dialog-container.component\r\n */\r\n\r\nimport { Component, ComponentRef, ElementRef, EmbeddedViewRef, EventEmitter, Inject, OnDestroy, OnInit, Optional, signal, ViewChild } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\r\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { OwlDateTimeContainerComponent } from '../date-time/date-time-picker-container.component';\r\nimport { IDateTimePickerAnimationEvent } from '../date-time/date-time-picker-animation-event';\r\nimport { OwlDialogConfigInterface } from './dialog-config.class';\r\n\r\n@Component({\r\n selector: 'owl-dialog-container',\r\n templateUrl: './dialog-container.component.html',\r\n standalone: false,\r\n host: {\r\n '[class.owl-dialog-container]': 'owlDialogContainerClass',\r\n '[attr.tabindex]': 'owlDialogContainerTabIndex',\r\n '[attr.id]': 'owlDialogContainerId',\r\n '[attr.role]': 'owlDialogContainerRole',\r\n '[attr.aria-labelledby]': 'owlDialogContainerAriaLabelledby',\r\n '[attr.aria-describedby]': 'owlDialogContainerAriaDescribedby'\r\n }\r\n})\r\nexport class OwlDialogContainerComponent extends BasePortalOutlet\r\n implements OnInit, OnDestroy {\r\n @ViewChild(CdkPortalOutlet, { static: true })\r\n portalOutlet: CdkPortalOutlet | null = null;\r\n\r\n /** ID элемента, используемого как заголовок диалогового окна */\r\n public ariaLabelledBy: string | null = null;\r\n /** Событие изменения состояния анимации */\r\n public animationStateChanged = new EventEmitter<IDateTimePickerAnimationEvent>();\r\n /** Класс, удерживающий фокус внутри диалогового окна и управляющий им */\r\n private focusTrap: FocusTrap;\r\n private contentAnimationSubscription = Subscription.EMPTY;\r\n private exiting = false;\r\n private destroyed = false;\r\n\r\n public isAnimating = signal(false);\r\n\r\n private _config: OwlDialogConfigInterface;\r\n private _component: ComponentRef<unknown>;\r\n get config(): OwlDialogConfigInterface {\r\n return this._config;\r\n }\r\n // Для анимации\r\n private params: any = {\r\n x: '0px',\r\n y: '0px',\r\n ox: '50%',\r\n oy: '50%',\r\n scale: 0\r\n };\r\n\r\n // Сохраняет элемент, находившийся в фокусе до открытия диалогового окна\r\n // Позволяет вернуть фокус на этот элемент после закрытия окна\r\n private elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\r\n\r\n get owlDialogContainerClass(): boolean {\r\n return true;\r\n }\r\n\r\n get owlDialogContainerTabIndex(): number {\r\n return -1;\r\n }\r\n\r\n get owlDialogContainerId(): string {\r\n return this._config.id;\r\n }\r\n\r\n get owlDialogContainerRole(): string {\r\n return this._config.role || null;\r\n }\r\n\r\n get owlDialogContainerAriaLabelledby(): string {\r\n return this.ariaLabelledBy;\r\n }\r\n\r\n get owlDialogContainerAriaDescribedby(): string {\r\n return this._config.ariaDescribedBy || null;\r\n }\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private focusTrapFactory: FocusTrapFactory,\r\n @Optional()\r\n @Inject(DOCUMENT)\r\n private document: any,\r\n ) {\r\n super();\r\n }\r\n\r\n public ngOnInit() {}\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed = true;\r\n this.contentAnimationSubscription.unsubscribe();\r\n this.restoreFocus();\r\n this.animationStateChanged.complete();\r\n }\r\n\r\n /**\r\n * Подключает ComponentPortal как содержимое контейнера диалогового окна\r\n */\r\n public attachComponentPortal<T>(\r\n portal: ComponentPortal<T>,\r\n ): ComponentRef<T> {\r\n if (this.portalOutlet.hasAttached()) {\r\n throw Error(\r\n 'Attempting to attach dialog content after content is already attached',\r\n );\r\n }\r\n\r\n this.savePreviouslyFocusedElement();\r\n const component = this.portalOutlet.attachComponentPortal(portal);\r\n const pickerContainer = component.instance as OwlDateTimeContainerComponent<unknown>;\r\n this.contentAnimationSubscription = pickerContainer.animationStateChanged.subscribe(state => {\r\n if (state.phaseName === 'start') {\r\n this.onAnimationStart(state);\r\n } else {\r\n this.onAnimationDone(state);\r\n }\r\n });\r\n this._component = component;\r\n return component;\r\n }\r\n\r\n public attachTemplatePortal<C>(\r\n portal: TemplatePortal<C>,\r\n ): EmbeddedViewRef<C> {\r\n throw new Error('Method not implemented.');\r\n }\r\n\r\n public setConfig(config: OwlDialogConfigInterface): void {\r\n this._config = config;\r\n\r\n if (config.event) {\r\n this.calculateZoomOrigin(config.event);\r\n }\r\n }\r\n\r\n public onAnimationStart(event: IDateTimePickerAnimationEvent): void {\r\n if (this.exiting && event.toState === 'enter') {\r\n return;\r\n }\r\n this.isAnimating.set(true);\r\n this.animationStateChanged.emit(event);\r\n }\r\n\r\n public onAnimationDone(event: IDateTimePickerAnimationEvent): void {\r\n if (this.exiting && event.toState === 'enter') {\r\n return;\r\n }\r\n if (event.toState === 'enter') {\r\n this.trapFocus();\r\n } else if (event.toState === 'leave') {\r\n this.restoreFocus();\r\n }\r\n\r\n this.animationStateChanged.emit(event);\r\n this.isAnimating.set(false);\r\n }\r\n\r\n public startExitAnimation() {\r\n this.exiting = true;\r\n this._component.destroy();\r\n }\r\n\r\n /**\r\n * Вычисляет точку начала, используемую в `zoomFadeInFrom()`,\r\n * Для анимации\r\n */\r\n private calculateZoomOrigin(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n const clientX = event.clientX;\r\n const clientY = event.clientY;\r\n\r\n const wh = window.innerWidth / 2;\r\n const hh = window.innerHeight / 2;\r\n const x = clientX - wh;\r\n const y = clientY - hh;\r\n const ox = clientX / window.innerWidth;\r\n const oy = clientY / window.innerHeight;\r\n\r\n this.params.x = `${x}px`;\r\n this.params.y = `${y}px`;\r\n this.params.ox = `${ox * 100}%`;\r\n this.params.oy = `${oy * 100}%`;\r\n this.params.scale = 0;\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Сохраняет элемент, находившийся в фокусе до открытия диалогового окна\r\n */\r\n private savePreviouslyFocusedElement(): void {\r\n if (this.document) {\r\n this.elementFocusedBeforeDialogWasOpened = this.document\r\n .activeElement as HTMLElement;\r\n\r\n Promise.resolve()\r\n .then(() => {\r\n if (!this.destroyed && !this.exiting) {\r\n this.elementRef.nativeElement.focus();\r\n }\r\n });\r\n }\r\n }\r\n\r\n private trapFocus(): void {\r\n if (!this.focusTrap) {\r\n this.focusTrap = this.focusTrapFactory.create(\r\n this.elementRef.nativeElement,\r\n );\r\n }\r\n\r\n if (this._config.autoFocus) {\r\n this.focusTrap.focusInitialElementWhenReady();\r\n }\r\n }\r\n\r\n private restoreFocus(): void {\r\n const toFocus = this.elementFocusedBeforeDialogWasOpened;\r\n\r\n // Дополнительная проверка нужна, поскольку IE иногда задаёт `activeElement` равным null\r\n const activeElement = this.document?.activeElement;\r\n if (toFocus && typeof toFocus.focus === 'function' &&\r\n (!activeElement || activeElement === this.document.body ||\r\n this.elementRef.nativeElement.contains(activeElement))) {\r\n toFocus.focus();\r\n }\r\n\r\n if (this.focusTrap) {\r\n this.focusTrap.destroy();\r\n this.focusTrap = null;\r\n }\r\n this.elementFocusedBeforeDialogWasOpened = null;\r\n }\r\n}\r\n","<ng-template [cdkPortalOutlet]></ng-template>\r\n","/**\r\n * object.utils\r\n */\r\n\r\n\r\n/**\r\n * Дополняет объект собственными перечисляемыми свойствами одного или нескольких исходных объектов,\r\n * аналогично Object.assign\r\n *\r\n * @param dest Объект, в который копируются свойства\r\n * @param sources Исходные объекты, из которых копируются свойства\r\n */\r\nexport function extendObject(dest: any, ...sources: any[]): any {\r\n if (dest == null) {\r\n throw TypeError('Cannot convert undefined or null to object');\r\n }\r\n\r\n for (const source of sources) {\r\n if (source != null) {\r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n dest[key] = source[key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return dest;\r\n}\r\n","/**\r\n * dialog.service\r\n */\r\n\r\nimport { ComponentRef, Inject, Injectable, InjectionToken, Injector, Optional, SkipSelf, TemplateRef } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { OwlDialogConfig, OwlDialogConfigInterface } from './dialog-config.class';\r\nimport { OwlDialogRef } from './dialog-ref.class';\r\nimport { OwlDialogContainerComponent } from './dialog-container.component';\r\nimport { extendObject } from '../utils';\r\nimport { defer, Observable, Subject } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { Overlay, OverlayConfig, OverlayContainer, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\r\n\r\nexport const OWL_DIALOG_DATA = new InjectionToken<any>('OwlDialogData');\r\n\r\n/**\r\n * Токен DI, определяющий обработку прокрутки при открытом диалоговом окне\r\n * */\r\nexport const OWL_DIALOG_SCROLL_STRATEGY = new InjectionToken<\r\n () => ScrollStrategy\r\n>('owl-dialog-scroll-strategy');\r\n\r\nexport function OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(\r\n overlay: Overlay\r\n): () => ScrollStrategy {\r\n const fn = () => overlay.scrollStrategies.block();\r\n return fn;\r\n}\r\n\r\n/** @docs-private */\r\nexport const OWL_DIALOG_SCROLL_STRATEGY_PROVIDER = {\r\n provide: OWL_DIALOG_SCROLL_STRATEGY,\r\n deps: [Overlay],\r\n useFactory: OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY\r\n};\r\n\r\n/**\r\n * Токен DI для задания параметров диалогового окна по умолчанию\r\n * */\r\nexport const OWL_DIALOG_DEFAULT_OPTIONS = new InjectionToken<OwlDialogConfig>(\r\n 'owl-dialog-default-options'\r\n);\r\n\r\n@Injectable()\r\nexport class OwlDialogService {\r\n /**\r\n * Поток событий завершения закрытия всех диалоговых окон\r\n * Если открытых окон нет, событие отправляется сразу при подписке\r\n */\r\n\r\n afterAllClosed: Observable<{}> = defer(\r\n () =>\r\n this.openDialogs.length\r\n ? this._afterAllClosed\r\n : this._afterAllClosed.pipe(startWith(undefined))\r\n );\r\n private readonly _ariaHiddenElements = new Map<Element, string | null>();\r\n\r\n private _openDialogsAtThisLevel: OwlDialogRef<any>[] = [];\r\n private _beforeOpenAtThisLevel = new Subject<OwlDialogRef<any>>();\r\n private _afterOpenAtThisLevel = new Subject<OwlDialogRef<any>>();\r\n private _afterAllClosedAtThisLevel = new Subject<void>();\r\n\r\n /** Хранит текущие открытые диалоговые окна */\r\n get openDialogs(): OwlDialogRef<any>[] {\r\n return this.parentDialog\r\n ? this.parentDialog.openDialogs\r\n : this._openDialogsAtThisLevel;\r\n }\r\n\r\n /** Поток событий открытия диалогового окна */\r\n get beforeOpen(): Subject<OwlDialogRef<any>> {\r\n return this.parentDialog\r\n ? this.parentDialog.beforeOpen\r\n : this._beforeOpenAtThisLevel;\r\n }\r\n\r\n /** Поток событий открытия диалогового окна */\r\n get afterOpen(): Subject<OwlDialogRef<any>> {\r\n return this.parentDialog\r\n ? this.parentDialog.afterOpen\r\n : this._afterOpenAtThisLevel;\r\n }\r\n\r\n get _afterAllClosed(): any {\r\n const parent = this.parentDialog;\r\n return parent\r\n ? parent._afterAllClosed\r\n : this._afterAllClosedAtThisLevel;\r\n }\r\n\r\n private get ariaHiddenElements(): Map<Element, string | null> {\r\n return this.parentDialog ? this.parentDialog.ariaHiddenElements : this._ariaHiddenElements;\r\n }\r\n\r\n private readonly scrollStrategy: () => ScrollStrategy;\r\n\r\n constructor(\r\n private overlay: Overlay,\r\n private injector: Injector,\r\n @Optional() private location: Location,\r\n @Inject(OWL_DIALOG_SCROLL_STRATEGY) scrollStrategy: any,\r\n @Optional()\r\n @Inject(OWL_DIALOG_DEFAULT_OPTIONS)\r\n private defaultOptions: OwlDialogConfigInterface,\r\n @Optional()\r\n @SkipSelf()\r\n private parentDialog: OwlDialogService,\r\n private overlayContainer: OverlayContainer\r\n ) {\r\n this.scrollStrategy = scrollStrategy;\r\n }\r\n\r\n public open<T>(\r\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\r\n config?: OwlDialogConfigInterface\r\n ): OwlDialogRef<any> {\r\n config = applyConfigDefaults(config, this.defaultOptions);\r\n\r\n if (config.id && this.getDialogById(config.id)) {\r\n throw Error(\r\n `Dialog with id \"${\r\n config.id\r\n }\" exists already. The dialog id must be unique.`\r\n );\r\n }\r\n\r\n const overlayRef = this.createOverlay(config);\r\n const dialogContainer = this.attachDialogContainer(overlayRef, config);\r\n const dialogRef = this.attachDialogContent<T>(\r\n componentOrTemplateRef,\r\n dialogContainer,\r\n overlayRef,\r\n config\r\n );\r\n\r\n if (!this.openDialogs.length) {\r\n this.hideNonDialogContentFromAssistiveTechnology();\r\n }\r\n\r\n this.openDialogs.push(dialogRef);\r\n dialogRef\r\n .afterClosed()\r\n .subscribe(() => this.removeOpenDialog(dialogRef));\r\n this.beforeOpen.next(dialogRef);\r\n this.afterOpen.next(dialogRef);\r\n return dialogRef;\r\n }\r\n\r\n /**\r\n * Закрывает все открытые диалоговые окна\r\n */\r\n public closeAll(): void {\r\n let i = this.openDialogs.length;\r\n\r\n while (i--) {\r\n this.openDialogs[i].close();\r\n }\r\n }\r\n\r\n /**\r\n * Находит открытое диалоговое окно по ID\r\n * @param id ID искомого диалогового окна\r\n */\r\n public getDialogById(id: string): OwlDialogRef<any> | undefined {\r\n return this.openDialogs.find(dialog => dialog.id === id);\r\n }\r\n\r\n private attachDialogContent<T>(\r\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\r\n dialogContainer: OwlDialogContainerComponent,\r\n overlayRef: OverlayRef,\r\n config: OwlDialogConfigInterface\r\n ) {\r\n const dialogRef = new OwlDialogRef<T>(\r\n overlayRef,\r\n dialogContainer,\r\n config.id,\r\n this.location\r\n );\r\n\r\n if (config.hasBackdrop) {\r\n overlayRef.backdropClick().subscribe(() => {\r\n if (!dialogRef.disableClose) {\r\n dialogRef.close();\r\n }\r\n });\r\n }\r\n\r\n if (componentOrTemplateRef instanceof TemplateRef) {\r\n } else {\r\n const injector = this.createInjector<T>(\r\n config,\r\n dialogRef,\r\n dialogContainer\r\n );\r\n const contentRef = dialogContainer.attachComponentPortal(\r\n new ComponentPortal(componentOrTemplateRef, undefined, injector)\r\n );\r\n dialogRef.componentInstance.set(contentRef.instance);\r\n }\r\n\r\n dialogRef\r\n .updateSize(config.width, config.height)\r\n .updatePosition(config.position);\r\n\r\n return dialogRef;\r\n }\r\n\r\n private createInjector<T>(\r\n config: OwlDialogConfigInterface,\r\n dialogRef: OwlDialogRef<T>,\r\n dialogContainer: OwlDialogContainerComponent\r\n ) {\r\n const userInjector =\r\n config?.viewContainerRef?.injector;\r\n const providers = [\r\n { provide: OwlDialogRef, useValue: dialogRef },\r\n { provide: OwlDialogContainerComponent, useValue: dialogContainer },\r\n { provide: OWL_DIALOG_DATA, useValue: config?.data },\r\n ];\r\n\r\n return Injector.create({\r\n providers,\r\n parent: userInjector || this.injector,\r\n });\r\n }\r\n\r\n private createOverlay(config: OwlDialogConfigInterface): OverlayRef {\r\n const overlayConfig = this.getOverlayConfig(config);\r\n return this.overlay.create(overlayConfig);\r\n }\r\n\r\n private attachDialogContainer(\r\n overlayRef: OverlayRef,\r\n config: OwlDialogConfigInterface\r\n ): OwlDialogContainerComponent {\r\n const containerPortal = new ComponentPortal(\r\n OwlDialogContainerComponent,\r\n config.viewContainerRef\r\n );\r\n const containerRef: ComponentRef<\r\n OwlDialogContainerComponent\r\n > = overlayRef.attach(containerPortal);\r\n containerRef.instance.setConfig(config);\r\n\r\n return containerRef.instance;\r\n }\r\n\r\n private getOverlayConfig(dialogConfig: OwlDialogConfigInterface): OverlayConfig {\r\n const state = new OverlayConfig({\r\n positionStrategy: this.overlay.position().global(),\r\n scrollStrategy:\r\n dialogConfig.scrollStrategy || this.scrollStrategy(),\r\n panelClass: dialogConfig.paneClass,\r\n hasBackdrop: dialogConfig.hasBackdrop,\r\n minWidth: dialogConfig.minWidth,\r\n minHeight: dialogConfig.minHeight,\r\n maxWidth: dialogConfig.maxWidth,\r\n maxHeight: dialogConfig.maxHeight\r\n });\r\n\r\n if (dialogConfig.backdropClass) {\r\n state.backdropClass = dialogConfig.backdropClass;\r\n }\r\n\r\n return state;\r\n }\r\n\r\n private removeOpenDialog(dialogRef: OwlDialogRef<any>): void {\r\n const index = this.openDialogs.indexOf(dialogRef);\r\n\r\n if (index > -1) {\r\n this.openDialogs.splice(index, 1);\r\n // Если все диалоговые окна закрыты, удаляем или восстанавливаем `aria-hidden`\r\n // у соседних элементов и отправляем событие в поток `afterAllClosed`\r\n if (!this.openDialogs.length) {\r\n this.ariaHiddenElements.forEach((previousValue, element) => {\r\n if (previousValue) {\r\n element.setAttribute('aria-hidden', previousValue);\r\n } else {\r\n element.removeAttribute('aria-hidden');\r\n }\r\n });\r\n\r\n this.ariaHiddenElements.clear();\r\n this._afterAllClosed.next();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Скрывает от вспомогательных технологий всё содержимое за пределами overlay\r\n */\r\n private hideNonDialogContentFromAssistiveTechnology() {\r\n const overlayContainer = this.overlayContainer.getContainerElement();\r\n\r\n // Проверяем, что контейнер overlay подключён к DOM\r\n if (overlayContainer.parentElement) {\r\n const siblings = overlayContainer.parentElement.children;\r\n\r\n for (let i = siblings.length - 1; i > -1; i--) {\r\n const sibling = siblings[i];\r\n\r\n if (\r\n sibling !== overlayContainer &&\r\n sibling.nodeName !== 'SCRIPT' &&\r\n sibling.nodeName !== 'STYLE' &&\r\n !sibling.hasAttribute('aria-live')\r\n ) {\r\n this.ariaHiddenElements.set(\r\n sibling,\r\n sibling.getAttribute('aria-hidden')\r\n );\r\n sibling.setAttribute('aria-hidden', 'true');\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Применяет параметры по умолчанию к конфигурации диалогового окна\r\n * @param config Изменяемая конфигурация\r\n * @param defaultOptions Параметры конфигурации по умолчанию\r\n * @returns Новый объект конфигурации\r\n */\r\nfunction applyConfigDefaults(\r\n config?: OwlDialogConfigInterface,\r\n defaultOptions?: OwlDialogConfigInterface\r\n): OwlDialogConfig {\r\n return extendObject(new OwlDialogConfig(), defaultOptions, config);\r\n}\r\n","/**\r\n * date-time-picker.component\r\n */\r\n\r\nimport { afterNextRender, AfterRenderRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, EventEmitter, Inject, inject, InjectionToken, Injector, Input, NgZone, OnDestroy, OnInit, Optional, Output, untracked, ViewContainerRef } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { BlockScrollStrategy, Overlay, OverlayConfig, OverlayRef, PositionStrategy, ScrollStrategy } from '@angular/cdk/overlay';\r\nimport { ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';\r\nimport { coerceArray, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { merge, Subscription } from 'rxjs';\r\nimport { filter, take } from 'rxjs/operators';\r\nimport { OwlDialogRef } from '../dialog/dialog-ref.class';\r\nimport { OwlDialogService } from '../dialog/dialog.service';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { OWL_DATE_TIME_FORMATS, OwlDateTimeFormats } from './adapter/date-time-format.class';\r\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\r\nimport { OwlDateTimeInputDirective } from './date-time-picker-input.directive';\r\nimport { OwlDateTime, PickerMode, PickerType, SelectMode } from './date-time.class';\r\n\r\n/** Токен DI, определяющий обработку прокрутки при открытом компоненте выбора даты и времени */\r\nexport const OWL_DTPICKER_SCROLL_STRATEGY = new InjectionToken<\r\n () => ScrollStrategy\r\n>('owl-dtpicker-scroll-strategy');\r\n\r\n/** @docs-private */\r\nexport function OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY(\r\n overlay: Overlay\r\n): () => BlockScrollStrategy {\r\n const fn = () => overlay.scrollStrategies.block();\r\n return fn;\r\n}\r\n\r\n/** @docs-private */\r\nexport const OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER = {\r\n provide: OWL_DTPICKER_SCROLL_STRATEGY,\r\n deps: [Overlay],\r\n useFactory: OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY\r\n};\r\n\r\n@Component({\r\n selector: 'owl-date-time',\r\n exportAs: 'owlDateTime',\r\n templateUrl: './date-time-picker.component.html',\r\n styleUrls: ['./date-time-picker.component.scss'],\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n preserveWhitespaces: false\r\n})\r\nexport class OwlDateTimeComponent<T> extends OwlDateTime<T>\r\n implements OnInit, OnDestroy {\r\n /** Пользовательский класс фона компонента выбора */\r\n @Input()\r\n public backdropClass: string | string[] = [];\r\n\r\n /** Пользовательский класс overlay-панели компонента выбора */\r\n @Input()\r\n public panelClass: string | string[] = [];\r\n /**\r\n * Открывается ли компонент выбора в диалоговом окне\r\n */\r\n _pickerMode: PickerMode = 'popup';\r\n /**\r\n * Стратегия прокрутки при открытом компоненте выбора\r\n * Подробнее: https://material.angular.io/cdk/overlay/overview#scroll-strategies\r\n * */\r\n @Input()\r\n public scrollStrategy: ScrollStrategy;\r\n\r\n set startAt(date: T | null) {\r\n this._startAt = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(date)\r\n );\r\n }\r\n /**\r\n * Обработчик закрытия компонента выбора\r\n * */\r\n @Output()\r\n afterPickerClosed = new EventEmitter<any>();\r\n /**\r\n * Обработчик перед открытием компонента выбора\r\n * */\r\n @Output()\r\n beforePickerOpen = new EventEmitter<any>();\r\n\r\n set endAt(date: T | null) {\r\n this._endAt = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(date)\r\n );\r\n }\r\n /**\r\n * Обработчик открытия компонента выбора\r\n * */\r\n @Output()\r\n afterPickerOpen = new EventEmitter<any>();\r\n @Input()\r\n get pickerType(): PickerType {\r\n return this._pickerType;\r\n }\r\n\r\n set pickerType(val: PickerType) {\r\n if (val !== this._pickerType) {\r\n this._pickerType = val;\r\n if (this._dtInput) {\r\n this._dtInput.formatNativeInputValue();\r\n }\r\n }\r\n }\r\n /**\r\n * Передаёт выбранный год в представлении нескольких лет\r\n * При этом выбранная дата не изменяется\r\n * */\r\n @Output()\r\n yearSelected = new EventEmitter<T>();\r\n @Input()\r\n get pickerMode() {\r\n return this._pickerMode;\r\n }\r\n\r\n set pickerMode(mode: PickerMode) {\r\n if (mode === 'popup') {\r\n this._pickerMode = mode;\r\n } else {\r\n this._pickerMode = 'dialog';\r\n }\r\n }\r\n /**\r\n * Передаёт выбранный месяц в представлении года\r\n * При этом выбранная дата не изменяется\r\n * */\r\n @Output()\r\n monthSelected = new EventEmitter<T>();\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled === undefined && this._dtInput\r\n ? this._dtInput.disabled\r\n : !!this._disabled;\r\n }\r\n /**\r\n * Передаёт выбранную дату\r\n * */\r\n @Output()\r\n dateSelected = new EventEmitter<T>();\r\n /**\r\n * Событие подтверждения выбранного значения\r\n * */\r\n public confirmSelectedChange = new EventEmitter<T[] | T>();\r\n /**\r\n * Событие отключения компонента выбора даты и времени\r\n * */\r\n public disabledChange = new EventEmitter<boolean>();\r\n /**\r\n * Задаёт тип компонента выбора даты и времени:\r\n * 'both' — календарь и выбор времени\r\n * 'calendar' — только календарь\r\n * 'timer' — только выбор времени\r\n */\r\n private _pickerType: PickerType = 'both';\r\n /** Отключён ли компонент выбора даты и времени */\r\n private _disabled: boolean;\r\n /** Открыт ли календарь */\r\n private _opened = false;\r\n @Input()\r\n get opened(): boolean {\r\n return this._opened;\r\n }\r\n\r\n set opened(val: boolean) {\r\n val ? this.open() : this.close();\r\n }\r\n private closing = false;\r\n private destroyed = false;\r\n private positionRenderRef: AfterRenderRef | undefined;\r\n private readonly injector = inject(Injector);\r\n private dialogClosedStreamSub = Subscription.EMPTY;\r\n /** Элемент, находившийся в фокусе до открытия компонента выбора даты и времени */\r\n private focusedElementBeforeOpen: HTMLElement | null = null;\r\n\r\n /** Дата, на которой календарь открывается изначально */\r\n private _startAt: T | null;\r\n\r\n @Input()\r\n get startAt(): T | null {\r\n // Если startAt задан явно, открываем календарь на этой дате\r\n // Иначе используем текущее выбранное значение\r\n if (this._startAt != null) {\r\n return this._startAt;\r\n }\r\n\r\n if (this._dtInput) {\r\n if (this._dtInput.selectMode === 'single') {\r\n return this._dtInput.value ?? null;\r\n } else if (\r\n this._dtInput.selectMode === 'range' ||\r\n this._dtInput.selectMode === 'rangeFrom'\r\n ) {\r\n return this._dtInput.values[0] ?? null;\r\n } else if (this._dtInput.selectMode === 'rangeTo') {\r\n return this._dtInput.values[1] ?? null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /** Конечная дата календаря в режиме диапазона */\r\n private _endAt: T | null;\r\n\r\n private pickerContainerPortal: ComponentPortal<\r\n OwlDateTimeContainerComponent<T>\r\n >;\r\n private pickerContainer: OwlDateTimeContainerComponent<T>;\r\n private popupRef: OverlayRef;\r\n private dialogRef: OwlDialogRef<OwlDateTimeContainerComponent<T>>;\r\n\r\n @Input()\r\n get endAt(): T | null {\r\n if (this._endAt != null) {\r\n return this._endAt;\r\n }\r\n\r\n if (this._dtInput) {\r\n if (this._dtInput.selectMode === 'single') {\r\n return this._dtInput.value ?? null;\r\n } else if (\r\n this._dtInput.selectMode === 'range' ||\r\n this._dtInput.selectMode === 'rangeFrom'\r\n ) {\r\n return this._dtInput.values[1] ?? null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n private dtInputSub = Subscription.EMPTY;\r\n private hidePickerStreamSub = Subscription.EMPTY;\r\n private confirmSelectedStreamSub = Subscription.EMPTY;\r\n private pickerOpenedStreamSub = Subscription.EMPTY;\r\n private pickerBeforeOpenedStreamSub = Subscription.EMPTY;\r\n\r\n set disabled(value: boolean) {\r\n value = coerceBooleanProperty(value);\r\n if (value !== this._disabled) {\r\n this._disabled = value;\r\n this.disabledChange.next(value);\r\n this.refreshView();\r\n }\r\n }\r\n\r\n private _dtInput: OwlDateTimeInputDirective<T>;\r\n get dtInput() {\r\n return this._dtInput;\r\n }\r\n\r\n private _selected: T | null;\r\n get selected() {\r\n return this._selected;\r\n }\r\n\r\n set selected(value: T | null) {\r\n this._selected = value;\r\n this.refreshView();\r\n }\r\n\r\n private _selecteds: T[] = [];\r\n get selecteds() {\r\n return this._selecteds;\r\n }\r\n\r\n set selecteds(values: T[]) {\r\n this._selecteds = values;\r\n this.refreshView();\r\n }\r\n\r\n /** Минимальная доступная для выбора дата */\r\n get minDateTime(): T | null {\r\n return this._dtInput && this._dtInput.min;\r\n }\r\n\r\n /** Максимальная доступная для выбора дата */\r\n get maxDateTime(): T | null {\r\n return this._dtInput && this._dtInput.max;\r\n }\r\n\r\n get dateTimeFilter(): (date: T | null) => boolean {\r\n return this._dtInput && this._dtInput.dateTimeFilter;\r\n }\r\n\r\n get selectMode(): SelectMode {\r\n return this._dtInput.selectMode;\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this._dtInput.isInSingleMode;\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return this._dtInput.isInRangeMode;\r\n }\r\n\r\n private readonly defaultScrollStrategy: () => ScrollStrategy;\r\n\r\n constructor(\r\n public overlay: Overlay,\r\n private viewContainerRef: ViewContainerRef,\r\n private dialogService: OwlDialogService,\r\n private ngZone: NgZone,\r\n protected changeDetector: ChangeDetectorRef,\r\n @Optional() protected dateTimeAdapter: DateTimeAdapter<T>,\r\n @Inject(OWL_DTPICKER_SCROLL_STRATEGY) defaultScrollStrategy: any,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n protected dateTimeFormats: OwlDateTimeFormats,\r\n @Optional()\r\n @Inject(DOCUMENT)\r\n private document: any\r\n ) {\r\n super(dateTimeAdapter, dateTimeFormats);\r\n this.defaultScrollStrategy = defaultScrollStrategy;\r\n }\r\n\r\n public refreshView(): void {\r\n this.changeDetector.markForCheck();\r\n this.pickerContainer?.refreshView();\r\n }\r\n\r\n public ngOnInit() {}\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed = true;\r\n this.close();\r\n this.dtInputSub.unsubscribe();\r\n this.disabledChange.complete();\r\n\r\n if (this.popupRef) {\r\n this.popupRef.dispose();\r\n }\r\n }\r\n\r\n public registerInput(input: OwlDateTimeInputDirective<T>): void {\r\n if (this._dtInput) {\r\n throw Error(\r\n 'A Owl DateTimePicker can only be associated with a single input.'\r\n );\r\n }\r\n\r\n this._dtInput = input;\r\n this.dtInputSub = this._dtInput.valueChange.subscribe(\r\n (value: T[] | T | null) => {\r\n if (Array.isArray(value)) {\r\n this.selecteds = value;\r\n } else {\r\n this.selected = value;\r\n }\r\n }\r\n );\r\n }\r\n\r\n public open(): void {\r\n if (this._opened || this.closing || this.destroyed || this.disabled) {\r\n return;\r\n }\r\n\r\n if (!this._dtInput) {\r\n throw Error(\r\n 'Attempted to open an DateTimePicker with no associated input.'\r\n );\r\n }\r\n\r\n if (this.document) {\r\n this.focusedElementBeforeOpen = this.document.activeElement;\r\n }\r\n\r\n // Сбрасываем выбранное значение компонента\r\n if (this.isInSingleMode) {\r\n this.selected = this._dtInput.value;\r\n } else if (this.isInRangeMode) {\r\n this.selecteds = this._dtInput.values;\r\n }\r\n\r\n // При открытии компонента выбора приводим текущее выбранное время\r\n // к времени из _startAt\r\n if (this.selected != null && this.pickerType !== 'calendar' && this._startAt != null) {\r\n this.selected = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.selected),\r\n this.dateTimeAdapter.getMonth(this.selected),\r\n this.dateTimeAdapter.getDate(this.selected),\r\n this.dateTimeAdapter.getHours(this._startAt),\r\n this.dateTimeAdapter.getMinutes(this._startAt),\r\n this.dateTimeAdapter.getSeconds(this._startAt)\r\n );\r\n }\r\n\r\n this._opened = true;\r\n this.changeDetector.markForCheck();\r\n this.pickerMode === 'dialog' ? this.openAsDialog() : this.openAsPopup();\r\n\r\n this.pickerContainer.picker = this;\r\n\r\n // Подписываемся на hidePickerStream контейнера компонента выбора\r\n this.hidePickerStreamSub = this.pickerContainer.hidePickerStream.subscribe(\r\n () => {\r\n this.close();\r\n }\r\n );\r\n\r\n // Подписываемся на confirmSelectedStream контейнера компонента выбора\r\n this.confirmSelectedStreamSub = this.pickerContainer.confirmSelectedStream.subscribe(\r\n (event: any) => {\r\n this.confirmSelect(event);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Выбирает указанную дату\r\n */\r\n public select(date: T[] | T): void {\r\n if (Array.isArray(date)) {\r\n this.selecteds = [...date];\r\n } else {\r\n this.selected = date;\r\n }\r\n\r\n /**\r\n * Условия автоматического подтверждения выбранной даты или диапазона:\r\n * 1) Режим компонента отличается от 'dialog'\r\n * 2) Тип компонента — 'calendar', а selectMode — 'single'\r\n * 3) Тип компонента — 'calendar', selectMode — 'range',\r\n * а в selecteds заданы начало (selecteds[0]) и конец (selecteds[1]) диапазона\r\n * 4) selectMode — 'rangeFrom', а selecteds[0] содержит значение\r\n * 5) selectMode — 'rangeTo', а selecteds[1] содержит значение\r\n * */\r\n if (\r\n this.pickerMode !== 'dialog' &&\r\n this.pickerType === 'calendar' &&\r\n ((this.selectMode === 'single' && this.selected != null) ||\r\n (this.selectMode === 'rangeFrom' && this.selecteds[0] != null) ||\r\n (this.selectMode === 'rangeTo' && this.selecteds[1] != null) ||\r\n (this.selectMode === 'range' &&\r\n this.selecteds[0] != null &&\r\n this.selecteds[1] != null))\r\n ) {\r\n this.confirmSelect();\r\n }\r\n }\r\n\r\n /**\r\n * Передаёт выбранный год в представлении нескольких лет\r\n * */\r\n public selectYear(normalizedYear: T): void {\r\n this.yearSelected.emit(normalizedYear);\r\n }\r\n\r\n /**\r\n * Передаёт выбранный месяц в представлении года\r\n * */\r\n public selectMonth(normalizedMonth: T): void {\r\n this.monthSelected.emit(normalizedMonth);\r\n }\r\n\r\n /**\r\n * Передаёт выбранную дату\r\n * */\r\n public selectDate(normalizedDate: T): void {\r\n this.dateSelected.emit(normalizedDate);\r\n }\r\n\r\n /**\r\n * Закрывает компонент выбора\r\n */\r\n public close(): void {\r\n if (!this._opened || this.closing) {\r\n return;\r\n }\r\n\r\n this.closing = true;\r\n this._opened = false;\r\n this.positionRenderRef?.destroy();\r\n this.positionRenderRef = undefined;\r\n this.hidePickerStreamSub?.unsubscribe();\r\n this.confirmSelectedStreamSub?.unsubscribe();\r\n this.pickerBeforeOpenedStreamSub?.unsubscribe();\r\n this.pickerOpenedStreamSub?.unsubscribe();\r\n this.dialogClosedStreamSub.unsubscribe();\r\n\r\n const dialogRef = this.dialogRef;\r\n this.dialogRef = null;\r\n dialogRef?.close();\r\n\r\n if (this.popupRef?.hasAttached()) {\r\n this.popupRef.detach();\r\n }\r\n if (this.pickerContainerPortal?.isAttached) {\r\n this.pickerContainerPortal.detach();\r\n }\r\n\r\n this.pickerContainer = null;\r\n\r\n // Игнорируем обработчики фокуса, пытающиеся повторно открыть компонент при восстановлении фокуса\r\n this.focusedElementBeforeOpen?.focus();\r\n this.focusedElementBeforeOpen = null;\r\n this.changeDetector.markForCheck();\r\n this.closing = false;\r\n this.afterPickerClosed.emit(this.isInSingleMode ? this.selected : this.selecteds);\r\n }\r\n\r\n /**\r\n * Подтверждает выбранное значение\r\n */\r\n public confirmSelect(event?: any): void {\r\n if (this.isInSingleMode) {\r\n const selected =\r\n this.selected ?? this.startAt ?? this.dateTimeAdapter.now();\r\n this.confirmSelectedChange.emit(selected);\r\n } else if (this.isInRangeMode) {\r\n this.confirmSelectedChange.emit(this.selecteds);\r\n }\r\n\r\n this.close();\r\n return;\r\n }\r\n\r\n /**\r\n * Открывает компонент выбора в диалоговом окне\r\n */\r\n private openAsDialog(): void {\r\n this.dialogRef = this.dialogService.open(\r\n OwlDateTimeContainerComponent,\r\n {\r\n autoFocus: false,\r\n backdropClass: [\r\n 'cdk-overlay-dark-backdrop',\r\n ...coerceArray(this.backdropClass)\r\n ],\r\n paneClass: ['owl-dt-dialog', ...coerceArray(this.panelClass)],\r\n viewContainerRef: this.viewContainerRef,\r\n scrollStrategy:\r\n this.scrollStrategy || this.defaultScrollStrategy()\r\n }\r\n );\r\n this.pickerContainer = untracked(this.dialogRef.componentInstance);\r\n\r\n this.pickerBeforeOpenedStreamSub = this.dialogRef.beforeOpen()\r\n .subscribe(() => {\r\n this.beforePickerOpen.emit(null);\r\n });\r\n this.pickerOpenedStreamSub = this.dialogRef.afterOpen()\r\n .subscribe(() => {\r\n this.afterPickerOpen.emit(null);\r\n });\r\n this.dialogClosedStreamSub = this.dialogRef.afterClosed()\r\n .subscribe(() => this.close());\r\n }\r\n\r\n /**\r\n * Открывает компонент выбора во всплывающем окне\r\n */\r\n private openAsPopup(): void {\r\n if (!this.pickerContainerPortal) {\r\n this.pickerContainerPortal = new ComponentPortal<\r\n OwlDateTimeContainerComponent<T>\r\n >(OwlDateTimeContainerComponent, this.viewContainerRef);\r\n }\r\n\r\n if (!this.popupRef) {\r\n this.createPopup();\r\n }\r\n\r\n if (!this.popupRef.hasAttached()) {\r\n const componentRef: ComponentRef<\r\n OwlDateTimeContainerComponent<T>\r\n > = this.popupRef.attach(this.pickerContainerPortal);\r\n this.pickerContainer = componentRef.instance;\r\n\r\n // Обновляем положение после отрисовки календаря\r\n this.positionRenderRef?.destroy();\r\n this.positionRenderRef = afterNextRender({\r\n mixedReadWrite: () => {\r\n this.positionRenderRef = undefined;\r\n if (this.popupRef.hasAttached()) {\r\n this.popupRef.updatePosition();\r\n }\r\n }\r\n }, { injector: this.injector });\r\n\r\n this.pickerBeforeOpenedStreamSub = this.pickerContainer.beforePickerOpenedStream\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.beforePickerOpen.emit(null);\r\n });\r\n\r\n // Отправляем событие открытия\r\n this.pickerOpenedStreamSub = this.pickerContainer.pickerOpenedStream\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.afterPickerOpen.emit(null);\r\n });\r\n }\r\n }\r\n\r\n private createPopup(): void {\r\n const overlayConfig = new OverlayConfig({\r\n positionStrategy: this.createPopupPositionStrategy(),\r\n hasBackdrop: true,\r\n backdropClass: [\r\n 'cdk-overlay-transparent-backdrop',\r\n ...coerceArray(this.backdropClass)\r\n ],\r\n scrollStrategy: this.scrollStrategy || this.defaultScrollStrategy(),\r\n panelClass: ['owl-dt-popup', ...coerceArray(this.panelClass)]\r\n });\r\n\r\n this.popupRef = this.overlay.create(overlayConfig);\r\n\r\n merge(\r\n this.popupRef.backdropClick(),\r\n this.popupRef.detachments(),\r\n this.popupRef\r\n .keydownEvents()\r\n .pipe(\r\n filter(\r\n event =>\r\n event.keyCode === ESCAPE ||\r\n (this._dtInput &&\r\n event.altKey &&\r\n event.keyCode === UP_ARROW)\r\n )\r\n )\r\n ).subscribe(() => this.close());\r\n }\r\n\r\n /**\r\n * Создаёт PositionStrategy всплывающего окна\r\n * */\r\n private createPopupPositionStrategy(): PositionStrategy {\r\n return this.overlay\r\n .position()\r\n .flexibleConnectedTo(this._dtInput.elementRef)\r\n .withTransformOriginOn('.owl-dt-container')\r\n .withFlexibleDimensions(false)\r\n .withPush(false)\r\n .withPositions([\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top'\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom'\r\n },\r\n {\r\n originX: 'end',\r\n originY: 'bottom',\r\n overlayX: 'end',\r\n overlayY: 'top'\r\n },\r\n {\r\n originX: 'end',\r\n originY: 'top',\r\n overlayX: 'end',\r\n overlayY: 'bottom'\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: -176\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: -352\r\n }\r\n ]);\r\n }\r\n}\r\n","","/**\r\n * date-time-picker-input.directive\r\n */\r\n\r\nimport { AfterContentInit, ChangeDetectorRef, Directive, ElementRef, EventEmitter, forwardRef, Inject, Input, OnDestroy, OnInit, Optional, Output, Renderer2 } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, ValidatorFn, Validators } from '@angular/forms';\r\nimport { DOWN_ARROW } from '@angular/cdk/keycodes';\r\nimport { OwlDateTimeComponent } from './date-time-picker.component';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { OWL_DATE_TIME_FORMATS, OwlDateTimeFormats } from './adapter/date-time-format.class';\r\nimport { Subscription } from 'rxjs';\r\nimport { SelectMode } from './date-time.class';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\n\r\nexport const OWL_DATETIME_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => OwlDateTimeInputDirective),\r\n multi: true\r\n};\r\n\r\nexport const OWL_DATETIME_VALIDATORS: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => OwlDateTimeInputDirective),\r\n multi: true\r\n};\r\n\r\n@Directive({\r\n selector: 'input[owlDateTime]',\r\n exportAs: 'owlDateTimeInput',\r\n standalone: false,\r\n host: {\r\n '(keydown)': 'handleKeydownOnHost($event)',\r\n '(blur)': 'handleBlurOnHost($event)',\r\n '(input)': 'handleInputOnHost($event)',\r\n '(change)': 'handleChangeOnHost($event)',\r\n '[attr.aria-haspopup]': 'owlDateTimeInputAriaHaspopup',\r\n '[attr.aria-owns]': 'owlDateTimeInputAriaOwns',\r\n '[attr.min]': 'minIso8601',\r\n '[attr.max]': 'maxIso8601',\r\n '[disabled]': 'owlDateTimeInputDisabled'\r\n },\r\n providers: [\r\n OWL_DATETIME_VALUE_ACCESSOR,\r\n OWL_DATETIME_VALIDATORS,\r\n ],\r\n})\r\nexport class OwlDateTimeInputDirective<T>\r\n implements\r\n OnInit,\r\n AfterContentInit,\r\n OnDestroy,\r\n ControlValueAccessor,\r\n Validator {\r\n static ngAcceptInputType_disabled: boolean|'';\r\n\r\n /**\r\n * Символ, разделяющий начало ('from') и конец ('to') диапазона в поле ввода\r\n */\r\n @Input()\r\n rangeSeparator = '-';\r\n @Input()\r\n get required() {\r\n return this._required;\r\n }\r\n /**\r\n * Обработчик события `change` этого `<input>`\r\n * */\r\n @Output()\r\n dateTimeChange = new EventEmitter<any>();\r\n /**\r\n * Обработчик события `input` этого `<input>`\r\n * */\r\n @Output()\r\n dateTimeInput = new EventEmitter<any>();\r\n /** Компонент выбора даты и времени, связанный с этим полем */\r\n public dtPicker: OwlDateTimeComponent<T>;\r\n\r\n private _dateTimeFilter: (date: T | null) => boolean;\r\n get dateTimeFilter() {\r\n return this._dateTimeFilter;\r\n }\r\n /** Событие изменения значения пользователем или программно */\r\n public valueChange = new EventEmitter<T[] | T | null>();\r\n /** Событие изменения состояния disabled */\r\n public disabledChange = new EventEmitter<boolean>();\r\n /**\r\n * Признак обязательного значения для диапазона [null, null]\r\n * */\r\n private _required: boolean;\r\n /** Минимальная допустимая дата */\r\n private _min: T | null;\r\n @Input()\r\n get min(): T | null {\r\n return this._min;\r\n }\r\n /** Максимальная допустимая дата */\r\n private _max: T | null;\r\n /**\r\n * Режим выбора даты\r\n */\r\n private _selectMode: SelectMode = 'single';\r\n @Input()\r\n get max(): T | null {\r\n return this._max;\r\n }\r\n\r\n constructor(\r\n private elmRef: ElementRef,\r\n private renderer: Renderer2,\r\n @Optional()\r\n private dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional() @Inject(OWL_DATE_TIME_FORMATS)\r\n private dateTimeFormats: OwlDateTimeFormats,\r\n private changeDetector: ChangeDetectorRef\r\n ) {\r\n if (!this.dateTimeAdapter) {\r\n throw Error(\r\n `OwlDateTimePicker: No provider found for DateTimeAdapter. You must import ` +\r\n `OwlLuxonDateTimeModule at your application root or provide a custom implementation.`\r\n );\r\n }\r\n\r\n if (!this.dateTimeFormats) {\r\n throw Error(\r\n `OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import ` +\r\n `OwlLuxonDateTimeModule at your application root or provide custom formats.`\r\n );\r\n }\r\n\r\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(() => {\r\n this.value = this.value;\r\n });\r\n }\r\n\r\n set required(value: any) {\r\n this._required = coerceBooleanProperty(value);\r\n this.validatorOnChange();\r\n }\r\n @Input()\r\n get selectMode() {\r\n return this._selectMode;\r\n }\r\n\r\n /**\r\n * Компонент выбора даты и времени, связанный с этим полем\r\n * */\r\n @Input()\r\n set owlDateTime(value: OwlDateTimeComponent<T>) {\r\n this.registerDateTimePicker(value);\r\n }\r\n\r\n /**\r\n * Функция фильтрации даты и времени\r\n */\r\n @Input()\r\n set owlDateTimeFilter(filter: (date: T | null) => boolean) {\r\n this._dateTimeFilter = filter;\r\n this.validatorOnChange();\r\n this.dtPicker?.refreshView();\r\n }\r\n\r\n private _value: T | null;\r\n @Input()\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n /** Отключено ли поле ввода даты и времени */\r\n private _disabled: boolean;\r\n\r\n private _values: T[] = [];\r\n @Input()\r\n get values() {\r\n return this._values;\r\n }\r\n\r\n @Input()\r\n get disabled() {\r\n return !!this._disabled;\r\n }\r\n\r\n set disabled(value: boolean) {\r\n const newValue = coerceBooleanProperty(value);\r\n const element = this.elmRef.nativeElement;\r\n\r\n if (this._disabled !== newValue) {\r\n this._disabled = newValue;\r\n this.disabledChange.emit(newValue);\r\n this.changeDetector.markForCheck();\r\n this.dtPicker?.refreshView();\r\n }\r\n\r\n // Проверяем наличие метода `blur`, поскольку при SSR он отсутствует\r\n if (newValue && element.blur) {\r\n // Обычно нативное поле ввода автоматически теряет фокус при отключении, что\r\n // запускает дополнительный цикл change detection и может вызвать ошибку\r\n // changed after checked, если поле ввода до этого находилось в фокусе\r\n element.blur();\r\n }\r\n }\r\n\r\n set min(value: T | null) {\r\n this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));\r\n this.validatorOnChange();\r\n this.dtPicker?.refreshView();\r\n }\r\n\r\n get elementRef(): ElementRef {\r\n return this.elmRef;\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this._selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this._selectMode === 'range' ||\r\n this._selectMode === 'rangeFrom' ||\r\n this._selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n set max(value: T | null) {\r\n this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));\r\n this.validatorOnChange();\r\n this.dtPicker?.refreshView();\r\n }\r\n\r\n private dtPickerSub: Subscription = Subscription.EMPTY;\r\n private localeSub: Subscription = Subscription.EMPTY;\r\n\r\n private lastValueValid = true;\r\n\r\n private onModelChange: Function = () => {};\r\n private onModelTouched: Function = () => {};\r\n private validatorOnChange: Function = () => {};\r\n\r\n set selectMode(mode: SelectMode) {\r\n if (\r\n mode !== 'single' &&\r\n mode !== 'range' &&\r\n mode !== 'rangeFrom' &&\r\n mode !== 'rangeTo'\r\n ) {\r\n throw Error('OwlDateTime Error: invalid selectMode value!');\r\n }\r\n\r\n this._selectMode = mode;\r\n this.validatorOnChange();\r\n this.dtPicker?.refreshView();\r\n }\r\n\r\n set value(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n this.lastValueValid = value == null || this.dateTimeAdapter.isValid(value);\r\n value = this.getValidDate(value);\r\n const oldDate = this._value;\r\n this._value = value;\r\n\r\n // Задаём свойство 'value' поля ввода\r\n this.formatNativeInputValue();\r\n\r\n // Проверяем, изменилось ли значение поля ввода\r\n if (!this.dateTimeAdapter.isEqual(oldDate, value)) {\r\n this.valueChange.emit(value);\r\n }\r\n }\r\n\r\n set values(values: T[]) {\r\n if (values && values.length > 0) {\r\n const deserialized = values.map(v => this.dateTimeAdapter.deserialize(v));\r\n this.lastValueValid = deserialized.every(v => v == null || this.dateTimeAdapter.isValid(v));\r\n this._values = deserialized.map(v => this.getValidDate(v));\r\n } else {\r\n this._values = [];\r\n this.lastValueValid = true;\r\n }\r\n\r\n // Задаём свойство 'value' поля ввода\r\n this.formatNativeInputValue();\r\n\r\n this.valueChange.emit(this._values);\r\n }\r\n\r\n get owlDateTimeInputAriaOwns(): string {\r\n return (this.dtPicker?.opened && this.dtPicker.id) || null;\r\n }\r\n\r\n get minIso8601(): string {\r\n return this.min != null ? this.dateTimeAdapter.toIso8601(this.min) : null;\r\n }\r\n\r\n get maxIso8601(): string {\r\n return this.max != null ? this.dateTimeAdapter.toIso8601(this.max) : null;\r\n }\r\n\r\n /**\r\n * Открывает компонент выбора по сочетанию Alt + ArrowDown\r\n * */\r\n public handleKeydownOnHost(event: KeyboardEvent ): void {\r\n if (event.altKey && event.keyCode === DOWN_ARROW) {\r\n this.dtPicker.open();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n /**\r\n * Задаёт свойство 'value' нативного поля ввода\r\n */\r\n public formatNativeInputValue(): void {\r\n if (this.isInSingleMode) {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n this._value != null\r\n ? this.dateTimeAdapter.format(\r\n this._value,\r\n this.dtPicker.formatString\r\n )\r\n : ''\r\n );\r\n } else if (this.isInRangeMode) {\r\n if (this._values && this.values.length > 0) {\r\n const from = this._values[0];\r\n const to = this._values[1];\r\n\r\n const fromFormatted = from != null\r\n ? this.dateTimeAdapter.format(\r\n from,\r\n this.dtPicker.formatString\r\n )\r\n : '';\r\n const toFormatted = to != null\r\n ? this.dateTimeAdapter.format(\r\n to,\r\n this.dtPicker.formatString\r\n )\r\n : '';\r\n\r\n if (!fromFormatted && !toFormatted) {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n null\r\n );\r\n } else {\r\n if (this._selectMode === 'range') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n fromFormatted +\r\n ' ' +\r\n this.rangeSeparator +\r\n ' ' +\r\n toFormatted\r\n );\r\n } else if (this._selectMode === 'rangeFrom') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n fromFormatted\r\n );\r\n } else if (this._selectMode === 'rangeTo') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n toFormatted\r\n );\r\n }\r\n }\r\n } else {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n ''\r\n );\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n /** Валидатор корректности разбора введённого значения */\r\n private parseValidator: ValidatorFn = (): ValidationErrors | null => {\r\n return this.lastValueValid\r\n ? null\r\n : { owlDateTimeParse: { text: this.elmRef.nativeElement.value } };\r\n }\r\n\r\n get owlDateTimeInputAriaHaspopup(): boolean {\r\n return true;\r\n }\r\n\r\n /** Валидатор минимальной даты */\r\n private minValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n if (this.isInSingleMode) {\r\n const controlValue = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value)\r\n );\r\n return this.min == null ||\r\n controlValue == null ||\r\n this.dateTimeAdapter.compare(this.min, controlValue) <= 0\r\n ? null\r\n : { owlDateTimeMin: { min: this.min, actual: controlValue } };\r\n } else if (this.isInRangeMode && control.value) {\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n );\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n );\r\n return this.min == null ||\r\n [controlValueFrom, controlValueTo].every(value =>\r\n value == null || this.dateTimeAdapter.compare(this.min, value) <= 0\r\n )\r\n ? null\r\n : {\r\n owlDateTimeMin: {\r\n min: this.min,\r\n actual: [controlValueFrom, controlValueTo]\r\n }\r\n };\r\n }\r\n }\r\n\r\n /** Валидатор максимальной даты */\r\n private maxValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n if (this.isInSingleMode) {\r\n const controlValue = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value)\r\n );\r\n return this.max == null ||\r\n controlValue == null ||\r\n this.dateTimeAdapter.compare(this.max, controlValue) >= 0\r\n ? null\r\n : { owlDateTimeMax: { max: this.max, actual: controlValue } };\r\n } else if (this.isInRangeMode && control.value) {\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n );\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n );\r\n return this.max == null ||\r\n [controlValueFrom, controlValueTo].every(value =>\r\n value == null || this.dateTimeAdapter.compare(this.max, value) >= 0\r\n )\r\n ? null\r\n : {\r\n owlDateTimeMax: {\r\n max: this.max,\r\n actual: [controlValueFrom, controlValueTo]\r\n }\r\n };\r\n }\r\n }\r\n\r\n /** Валидатор соответствия фильтру дат */\r\n private filterValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n const values = this.isInRangeMode && Array.isArray(control.value)\r\n ? control.value\r\n : [control.value];\r\n return !this._dateTimeFilter || values.every(value => {\r\n const date = this.getValidDate(this.dateTimeAdapter.deserialize(value));\r\n return date == null || this._dateTimeFilter(date);\r\n }) ? null : { owlDateTimeFilter: true };\r\n }\r\n\r\n get owlDateTimeInputDisabled(): boolean {\r\n return this.disabled;\r\n }\r\n\r\n /**\r\n * Валидатор диапазона дат\r\n * Проверяет, что начало диапазона находится не позже конца ('to')\r\n * */\r\n private rangeValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n if (this.isInSingleMode || !control.value) {\r\n return null;\r\n }\r\n\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n );\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n );\r\n\r\n return controlValueFrom == null ||\r\n controlValueTo == null ||\r\n this.dateTimeAdapter.compare(controlValueFrom, controlValueTo) <= 0\r\n ? null\r\n : { owlDateTimeRange: true };\r\n }\r\n\r\n public ngOnInit(): void {\r\n if (!this.dtPicker) {\r\n throw Error(\r\n `OwlDateTimePicker: the picker input doesn't have any associated owl-date-time component`\r\n );\r\n }\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.dtPickerSub = this.dtPicker.confirmSelectedChange.subscribe(\r\n (selecteds: T[] | T) => {\r\n if (Array.isArray(selecteds)) {\r\n this.values = selecteds;\r\n } else {\r\n this.value = selecteds;\r\n }\r\n\r\n this.onModelChange(selecteds);\r\n this.onModelTouched();\r\n this.dateTimeChange.emit({\r\n source: this,\r\n value: selecteds,\r\n input: this.elmRef.nativeElement\r\n });\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: selecteds,\r\n input: this.elmRef.nativeElement\r\n });\r\n }\r\n );\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.dtPickerSub.unsubscribe();\r\n this.localeSub.unsubscribe();\r\n this.valueChange.complete();\r\n this.disabledChange.complete();\r\n }\r\n\r\n public writeValue(value: any): void {\r\n if (this.isInSingleMode) {\r\n this.value = value;\r\n } else {\r\n this.values = value;\r\n }\r\n }\r\n\r\n public registerOnChange(fn: any): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: any): void {\r\n this.onModelTouched = fn;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n public validate(c: AbstractControl): { [key: string]: any } {\r\n return this.validator ? this.validator(c) : null;\r\n }\r\n\r\n public registerOnValidatorChange(fn: () => void): void {\r\n this.validatorOnChange = fn;\r\n }\r\n\r\n /**\r\n * Валидатор обязательного диапазона дат\r\n * Проверяет наличие обеих границ диапазона\r\n * */\r\n private requiredRangeValidator: ValidatorFn = (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n if (this.isInSingleMode || !control.value || !this.required) {\r\n return null;\r\n }\r\n\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n );\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n );\r\n\r\n return controlValueFrom == null ||\r\n controlValueTo == null\r\n ? { owlRequiredDateTimeRange: [controlValueFrom, controlValueTo] }\r\n : null;\r\n }\r\n\r\n public handleBlurOnHost(event: Event ): void {\r\n this.onModelTouched();\r\n }\r\n\r\n public handleInputOnHost(event: any ): void {\r\n const value = event.target.value;\r\n if (this._selectMode === 'single') {\r\n this.changeInputInSingleMode(value);\r\n } else if (this._selectMode === 'range') {\r\n this.changeInputInRangeMode(value);\r\n } else {\r\n this.changeInputInRangeFromToMode(value);\r\n }\r\n }\r\n\r\n public handleChangeOnHost(event: any ): void {\r\n\r\n let v;\r\n if (this.isInSingleMode) {\r\n v = this.value;\r\n } else if (this.isInRangeMode) {\r\n v = this.values;\r\n }\r\n\r\n this.dateTimeChange.emit({\r\n source: this,\r\n value: v,\r\n input: this.elmRef.nativeElement\r\n });\r\n }\r\n\r\n /** Объединённый валидатор этого поля ввода */\r\n private validator: ValidatorFn | null = Validators.compose([\r\n this.parseValidator,\r\n this.minValidator,\r\n this.maxValidator,\r\n this.filterValidator,\r\n this.rangeValidator,\r\n this.requiredRangeValidator\r\n ]);\r\n\r\n /**\r\n * Регистрирует связь между полем ввода и компонентом выбора\r\n */\r\n private registerDateTimePicker(picker: OwlDateTimeComponent<T>) {\r\n if (picker) {\r\n this.dtPicker = picker;\r\n this.dtPicker.registerInput(this);\r\n }\r\n }\r\n\r\n /**\r\n * Преобразует указанный объект в корректный объект даты\r\n */\r\n private getValidDate(obj: any): T | null {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : null;\r\n }\r\n\r\n /**\r\n * Преобразует строку времени в строку даты и времени\r\n * При pickerType равном 'timer' поле ввода содержит строку времени\r\n * Метод parse адаптера dateTimeAdapter не может разобрать строку времени как объект даты\r\n * Поэтому эта функция преобразует строку времени в строку даты и времени\r\n */\r\n private convertTimeStringToDateTimeString(\r\n timeString: string,\r\n dateTime: T\r\n ): string | null {\r\n if (timeString) {\r\n const v = dateTime ?? this.dateTimeAdapter.now();\r\n const dateString = this.dateTimeAdapter.format(\r\n v,\r\n this.dateTimeFormats.datePickerInput\r\n );\r\n return dateString + ' ' + timeString;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Обрабатывает изменение поля ввода в режиме single\r\n */\r\n private changeInputInSingleMode(inputValue: string): void {\r\n let value = inputValue;\r\n if (this.dtPicker.pickerType === 'timer') {\r\n value = this.convertTimeStringToDateTimeString(value, this.value);\r\n }\r\n\r\n let result = this.dateTimeAdapter.parse(\r\n value,\r\n this.dateTimeFormats.parseInput\r\n );\r\n this.lastValueValid = result == null || this.dateTimeAdapter.isValid(result);\r\n result = this.getValidDate(result);\r\n\r\n // Если newValue совпадает с oldValue, не отправляем событие valueChange\r\n // result равный null означает, что событие ввода произошло, но значение недопустимо\r\n if (!this.isSameValue(result, this._value) || result === null) {\r\n this._value = result;\r\n this.valueChange.emit(result);\r\n this.onModelChange(result);\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: result,\r\n input: this.elmRef.nativeElement\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Обрабатывает изменение поля ввода в режиме rangeFrom или rangeTo\r\n */\r\n private changeInputInRangeFromToMode(inputValue: string): void {\r\n const originalValue =\r\n this._selectMode === 'rangeFrom'\r\n ? this._values[0]\r\n : this._values[1];\r\n\r\n if (this.dtPicker.pickerType === 'timer') {\r\n inputValue = this.convertTimeStringToDateTimeString(\r\n inputValue,\r\n originalValue\r\n );\r\n }\r\n\r\n let result = this.dateTimeAdapter.parse(\r\n inputValue,\r\n this.dateTimeFormats.parseInput\r\n );\r\n this.lastValueValid = result == null || this.dateTimeAdapter.isValid(result);\r\n result = this.getValidDate(result);\r\n\r\n // Если newValue совпадает с oldValue, не отправляем событие valueChange\r\n if (\r\n (this._selectMode === 'rangeFrom' &&\r\n this.isSameValue(result, this._values[0]) &&\r\n result) ||\r\n (this._selectMode === 'rangeTo' &&\r\n this.isSameValue(result, this._values[1]) &&\r\n result)\r\n ) {\r\n return;\r\n }\r\n\r\n this._values =\r\n this._selectMode === 'rangeFrom'\r\n ? [result, this._values[1]]\r\n : [this._values[0], result];\r\n this.valueChange.emit(this._values);\r\n this.onModelChange(this._values);\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: this._values,\r\n input: this.elmRef.nativeElement\r\n });\r\n }\r\n\r\n /**\r\n * Обрабатывает изменение поля ввода в режиме range\r\n */\r\n private changeInputInRangeMode(inputValue: string): void {\r\n const wasValid = this.lastValueValid;\r\n const selecteds = inputValue.split(this.rangeSeparator)\r\n .map(value => value.trim());\r\n let fromString = selecteds[0];\r\n let toString = selecteds[1];\r\n\r\n if (this.dtPicker.pickerType === 'timer') {\r\n fromString = this.convertTimeStringToDateTimeString(\r\n fromString,\r\n this.values[0]\r\n );\r\n toString = this.convertTimeStringToDateTimeString(\r\n toString,\r\n this.values[1]\r\n );\r\n }\r\n\r\n let from = this.dateTimeAdapter.parse(\r\n fromString,\r\n this.dateTimeFormats.parseInput\r\n );\r\n let to = this.dateTimeAdapter.parse(\r\n toString,\r\n this.dateTimeFormats.parseInput\r\n );\r\n this.lastValueValid =\r\n (from == null || this.dateTimeAdapter.isValid(from)) &&\r\n (to == null || this.dateTimeAdapter.isValid(to));\r\n from = this.getValidDate(from);\r\n to = this.getValidDate(to);\r\n\r\n // Если newValue совпадает с oldValue, не отправляем событие valueChange\r\n if (\r\n !this.isSameValue(from, this._values[0]) ||\r\n !this.isSameValue(to, this._values[1]) ||\r\n wasValid !== this.lastValueValid ||\r\n (from === null && to === null)\r\n ) {\r\n this._values = [from, to];\r\n this.valueChange.emit(this._values);\r\n this.onModelChange(this._values);\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: this._values,\r\n input: this.elmRef.nativeElement\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Проверяет равенство двух значений\r\n */\r\n private isSameValue(first: T | null, second: T | null): boolean {\r\n if (first != null && second != null) {\r\n return this.dateTimeAdapter.compare(first, second) === 0;\r\n }\r\n\r\n return first === second;\r\n }\r\n}\r\n","/**\r\n * numberFixedLen.pipe\r\n */\r\n\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'numberFixedLen',\r\n standalone: false,\r\n})\r\nexport class NumberFixedLenPipe implements PipeTransform {\r\n transform( num: number, len: number ): any {\r\n const number = Math.floor(num);\r\n const length = Math.floor(len);\r\n\r\n if (num === null || isNaN(number) || isNaN(length)) {\r\n return num;\r\n }\r\n\r\n let numString = number.toString();\r\n\r\n while (numString.length < length) {\r\n numString = '0' + numString;\r\n }\r\n\r\n return numString;\r\n }\r\n}\r\n","/**\r\n * date-time-inline.component\r\n */\r\n\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, Inject, Input, OnInit, Optional, Output, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { OwlDateTime, PickerMode, PickerType, SelectMode } from './date-time.class';\r\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\r\nimport { OWL_DATE_TIME_FORMATS, OwlDateTimeFormats } from './adapter/date-time-format.class';\r\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\r\n\r\nexport const OWL_DATETIME_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => OwlDateTimeInlineComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n selector: 'owl-date-time-inline',\r\n templateUrl: './date-time-inline.component.html',\r\n styleUrls: ['./date-time-inline.component.scss'],\r\n host: {\r\n '[class.owl-dt-inline]': 'owlDTInlineClass',\r\n '[attr.aria-disabled]': 'disabled || null'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n preserveWhitespaces: false,\r\n providers: [OWL_DATETIME_VALUE_ACCESSOR]\r\n})\r\nexport class OwlDateTimeInlineComponent<T> extends OwlDateTime<T>\r\n implements OnInit, ControlValueAccessor {\r\n @ViewChild(OwlDateTimeContainerComponent, { static: true })\r\n container: OwlDateTimeContainerComponent<T>;\r\n\r\n /**\r\n * Передаёт выбранный год в представлении нескольких лет\r\n * При этом выбранная дата не изменяется\r\n * */\r\n @Output()\r\n yearSelected = new EventEmitter<T>();\r\n @Input()\r\n get pickerType(): PickerType {\r\n return this._pickerType;\r\n }\r\n\r\n set pickerType(val: PickerType) {\r\n if (val !== this._pickerType) {\r\n this._pickerType = val;\r\n }\r\n }\r\n\r\n private _disabled = false;\r\n @Input()\r\n get disabled(): boolean {\r\n return !!this._disabled;\r\n }\r\n /**\r\n * Передаёт выбранный месяц в представлении года\r\n * При этом выбранная дата не изменяется\r\n * */\r\n @Output()\r\n monthSelected = new EventEmitter<T>();\r\n\r\n private _selectMode: SelectMode = 'single';\r\n @Input()\r\n get selectMode() {\r\n return this._selectMode;\r\n }\r\n\r\n set selectMode(mode: SelectMode) {\r\n if (\r\n mode !== 'single' &&\r\n mode !== 'range' &&\r\n mode !== 'rangeFrom' &&\r\n mode !== 'rangeTo'\r\n ) {\r\n throw Error('OwlDateTime Error: invalid selectMode value!');\r\n }\r\n\r\n this._selectMode = mode;\r\n }\r\n /**\r\n * Передаёт выбранную дату\r\n * */\r\n @Output()\r\n dateSelected = new EventEmitter<T>();\r\n /**\r\n * Задаёт тип компонента выбора даты и времени:\r\n * 'both' — календарь и выбор времени\r\n * 'calendar' — только календарь\r\n * 'timer' — только выбор времени\r\n */\r\n private _pickerType: PickerType = 'both';\r\n\r\n set startAt(date: T | null) {\r\n this._startAt = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(date)\r\n );\r\n }\r\n /** Минимальная допустимая дата */\r\n private _min: T | null;\r\n /** Максимальная допустимая дата */\r\n private _max: T | null;\r\n\r\n set endAt(date: T | null) {\r\n this._endAt = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(date)\r\n );\r\n }\r\n\r\n private _dateTimeFilter: (date: T | null) => boolean;\r\n @Input('owlDateTimeFilter')\r\n get dateTimeFilter() {\r\n return this._dateTimeFilter;\r\n }\r\n\r\n set dateTimeFilter(filter: (date: T | null) => boolean) {\r\n this._dateTimeFilter = filter;\r\n }\r\n\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this.changeDetector.markForCheck();\r\n this.container?.refreshView();\r\n }\r\n\r\n /** Дата, на которой календарь открывается изначально */\r\n private _startAt: T | null;\r\n\r\n @Input('min')\r\n set minDateTime(value: T | null) {\r\n this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n @Input()\r\n get startAt(): T | null {\r\n if (this._startAt != null) {\r\n return this._startAt;\r\n }\r\n\r\n if (this.selectMode === 'single') {\r\n return this.value ?? null;\r\n } else if (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom'\r\n ) {\r\n return this.values[0] ?? null;\r\n } else if (this.selectMode === 'rangeTo') {\r\n return this.values[1] ?? null;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /** Дата открытия календаря в режиме диапазона */\r\n private _endAt: T | null;\r\n\r\n @Input('max')\r\n set maxDateTime(value: T | null) {\r\n this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n private _value: T | null;\r\n @Input()\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n set value(value: T | null) {\r\n value = this.dateTimeAdapter.deserialize(value);\r\n value = this.getValidDate(value);\r\n this._value = value;\r\n this.selected = value;\r\n }\r\n\r\n private _values: (T | null)[] = [];\r\n @Input()\r\n get values() {\r\n return this._values;\r\n }\r\n\r\n @Input()\r\n get endAt(): T | null {\r\n if (this._endAt != null) {\r\n return this._endAt;\r\n }\r\n\r\n if (this.selectMode === 'single') {\r\n return this.value ?? null;\r\n } else if (\r\n this.selectMode === 'range' ||\r\n this.selectMode === 'rangeFrom'\r\n ) {\r\n return this.values[1] ?? null;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n get minDateTime(): T | null {\r\n return this._min ?? null;\r\n }\r\n\r\n get maxDateTime(): T | null {\r\n return this._max ?? null;\r\n }\r\n\r\n set values(values: (T | null)[]) {\r\n if (values && values.length > 0) {\r\n values = values.map(v => {\r\n v = this.dateTimeAdapter.deserialize(v);\r\n v = this.getValidDate(v);\r\n return v != null ? this.dateTimeAdapter.clone(v) : null;\r\n });\r\n this._values = [...values];\r\n this.selecteds = [...values];\r\n } else {\r\n this._values = [];\r\n this.selecteds = [];\r\n }\r\n }\r\n\r\n private _selected: T | null;\r\n get selected() {\r\n return this._selected;\r\n }\r\n\r\n set selected(value: T | null) {\r\n this._selected = value;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n private _selecteds: T[] = [];\r\n get selecteds() {\r\n return this._selecteds;\r\n }\r\n\r\n set selecteds(values: T[]) {\r\n this._selecteds = values;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n get opened(): boolean {\r\n return true;\r\n }\r\n\r\n get pickerMode(): PickerMode {\r\n return 'inline';\r\n }\r\n\r\n get isInSingleMode(): boolean {\r\n return this._selectMode === 'single';\r\n }\r\n\r\n get isInRangeMode(): boolean {\r\n return (\r\n this._selectMode === 'range' ||\r\n this._selectMode === 'rangeFrom' ||\r\n this._selectMode === 'rangeTo'\r\n );\r\n }\r\n\r\n get owlDTInlineClass(): boolean {\r\n return true;\r\n }\r\n\r\n private onModelChange: Function = () => { };\r\n private onModelTouched: Function = () => { };\r\n\r\n constructor(\r\n protected changeDetector: ChangeDetectorRef,\r\n @Optional() protected dateTimeAdapter: DateTimeAdapter<T>,\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_FORMATS)\r\n protected dateTimeFormats: OwlDateTimeFormats\r\n ) {\r\n super(dateTimeAdapter, dateTimeFormats);\r\n }\r\n\r\n public ngOnInit() {\r\n this.container.picker = this;\r\n }\r\n\r\n public writeValue(value: any): void {\r\n if (this.isInSingleMode) {\r\n this.value = value;\r\n this.container.pickerDateTime = value;\r\n } else {\r\n this.values = value;\r\n this.container.pickerDateTime = this._values[\r\n this.container.activeSelectedIndex\r\n ];\r\n }\r\n }\r\n\r\n public registerOnChange(fn: any): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: any): void {\r\n this.onModelTouched = fn;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n public select(date: T[] | T): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n if (Array.isArray(date)) {\r\n this.values = [...date];\r\n } else {\r\n this.value = date;\r\n }\r\n this.onModelChange(date);\r\n this.onModelTouched();\r\n }\r\n\r\n /**\r\n * Передаёт выбранный год в представлении нескольких лет\r\n * */\r\n public selectYear(normalizedYear: T): void {\r\n this.yearSelected.emit(normalizedYear);\r\n }\r\n\r\n /**\r\n * Передаёт выбранный месяц в представлении года\r\n * */\r\n public selectMonth(normalizedMonth: T): void {\r\n this.monthSelected.emit(normalizedMonth);\r\n }\r\n\r\n /**\r\n * Передаёт выбранную дату\r\n * */\r\n public selectDate(normalizedDate: T): void {\r\n this.dateSelected.emit(normalizedDate);\r\n }\r\n}\r\n","<owl-date-time-container></owl-date-time-container>","/**\r\n * dialog.module\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { OWL_DIALOG_SCROLL_STRATEGY_PROVIDER, OwlDialogService } from './dialog.service';\r\nimport { OwlDialogContainerComponent } from './dialog-container.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule, A11yModule, OverlayModule, PortalModule],\r\n exports: [],\r\n declarations: [\r\n OwlDialogContainerComponent,\r\n ],\r\n providers: [\r\n OWL_DIALOG_SCROLL_STRATEGY_PROVIDER,\r\n OwlDialogService,\r\n ]\r\n})\r\nexport class OwlDialogModule {\r\n}\r\n","/**\r\n * date-time.module\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { OwlDateTimeTriggerDirective } from './date-time-picker-trigger.directive';\r\nimport { OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER, OwlDateTimeComponent } from './date-time-picker.component';\r\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\r\nimport { OwlDateTimeInputDirective } from './date-time-picker-input.directive';\r\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\r\nimport { OwlMonthViewComponent } from './calendar-month-view.component';\r\nimport { OwlCalendarBodyComponent } from './calendar-body.component';\r\nimport { OwlYearViewComponent } from './calendar-year-view.component';\r\nimport { OwlMultiYearViewComponent } from './calendar-multi-year-view.component';\r\nimport { OwlTimerBoxComponent } from './timer-box.component';\r\nimport { OwlTimerComponent } from './timer.component';\r\nimport { NumberFixedLenPipe } from './numberedFixLen.pipe';\r\nimport { OwlCalendarComponent } from './calendar.component';\r\nimport { OwlDateTimeInlineComponent } from './date-time-inline.component';\r\nimport { OwlDialogModule } from '../dialog/dialog.module';\r\nimport { optionsProviders } from './options-provider';\r\n\r\n@NgModule({\r\n imports: [CommonModule, OverlayModule, OwlDialogModule, A11yModule],\r\n exports: [\r\n OwlCalendarComponent,\r\n OwlTimerComponent,\r\n OwlDateTimeTriggerDirective,\r\n OwlDateTimeInputDirective,\r\n OwlDateTimeComponent,\r\n OwlDateTimeInlineComponent,\r\n OwlMultiYearViewComponent,\r\n OwlYearViewComponent,\r\n OwlMonthViewComponent,\r\n ],\r\n declarations: [\r\n OwlDateTimeTriggerDirective,\r\n OwlDateTimeInputDirective,\r\n OwlDateTimeComponent,\r\n OwlDateTimeContainerComponent,\r\n OwlMultiYearViewComponent,\r\n OwlYearViewComponent,\r\n OwlMonthViewComponent,\r\n OwlTimerComponent,\r\n OwlTimerBoxComponent,\r\n OwlCalendarComponent,\r\n OwlCalendarBodyComponent,\r\n NumberFixedLenPipe,\r\n OwlDateTimeInlineComponent,\r\n ],\r\n providers: [\r\n OwlDateTimeIntl,\r\n OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER,\r\n ...optionsProviders,\r\n ]\r\n})\r\nexport class OwlDateTimeModule {\r\n}\r\n","/**\r\n * luxon-date-time-adapter.class\r\n */\r\n\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { DateTime, Info, Settings } from 'luxon';\r\n\r\nimport { DateTimeAdapter, OWL_DATE_TIME_LOCALE } from './date-time-adapter.class';\r\n\r\n@Injectable()\r\nexport class LuxonDateTimeAdapter extends DateTimeAdapter<DateTime> {\r\n public firstMonthOfTheYear = 0;\r\n\r\n /**\r\n * 0 - воскресенье\r\n * 1 - понедельник\r\n * ...\r\n * 6 - суббота\r\n */\r\n public firstDayOfTheWeek = 0;\r\n\r\n public constructor(\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_LOCALE)\r\n private owlDateTimeLocale: string,\r\n ) {\r\n super();\r\n\r\n this.setLocale(owlDateTimeLocale || Settings.defaultLocale || 'ru');\r\n }\r\n\r\n public getYear(date: DateTime): number {\r\n return date.year;\r\n }\r\n\r\n /**\r\n * Компонент выбора даты ожидает индекс месяца:\r\n * 0 - январь\r\n * 11 - декабрь\r\n *\r\n * Luxon использует:\r\n * 1 - январь\r\n * 12 - декабрь\r\n */\r\n public getMonth(date: DateTime): number {\r\n return date.month - 1;\r\n }\r\n\r\n /**\r\n * Компонент выбора даты ожидает:\r\n * 0 - воскресенье\r\n * 6 - суббота\r\n *\r\n * День недели в Luxon:\r\n * 1 - понедельник\r\n * 7 - воскресенье\r\n */\r\n public getDay(date: DateTime): number {\r\n return date.weekday % 7;\r\n }\r\n\r\n public getDate(date: DateTime): number {\r\n return date.day;\r\n }\r\n\r\n public getHours(date: DateTime): number {\r\n return date.hour;\r\n }\r\n\r\n public getMinutes(date: DateTime): number {\r\n return date.minute;\r\n }\r\n\r\n public getSeconds(date: DateTime): number {\r\n return date.second;\r\n }\r\n\r\n public getTime(date: DateTime): number {\r\n return date.toMillis();\r\n }\r\n\r\n public getNumDaysInMonth(date: DateTime): number {\r\n return date.daysInMonth ?? 0;\r\n }\r\n\r\n public differenceInCalendarDays(dateLeft: DateTime, dateRight: DateTime): number {\r\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\r\n return Math.round(\r\n DateTime.utc(dateLeft.year, dateLeft.month, dateLeft.day)\r\n .diff(\r\n DateTime.utc(dateRight.year, dateRight.month, dateRight.day),\r\n 'days'\r\n ).days\r\n );\r\n }\r\n\r\n return Number.NaN;\r\n }\r\n\r\n public getYearName(date: DateTime): string {\r\n return date.setLocale(this.locale).toFormat('yyyy');\r\n }\r\n\r\n public getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n return Info.months(style, { locale: this.locale });\r\n }\r\n\r\n public getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const weekdays = Info.weekdays(style, { locale: this.locale });\r\n\r\n // Luxon возвращает дни недели от понедельника до воскресенья\r\n // Компонент выбора даты ожидает порядок от воскресенья до субботы\r\n return [\r\n weekdays[6],\r\n ...weekdays.slice(0, 6),\r\n ];\r\n }\r\n\r\n public getDateNames(): string[] {\r\n return Array.from({ length: 31 }, (_, index) => `${index + 1}`);\r\n }\r\n\r\n public toIso8601(date: DateTime): string {\r\n return date.toISO() ?? '';\r\n }\r\n\r\n public isEqual(dateLeft: DateTime, dateRight: DateTime): boolean {\r\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\r\n return dateLeft.toMillis() === dateRight.toMillis();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public isSameDay(dateLeft: DateTime, dateRight: DateTime): boolean {\r\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\r\n return (\r\n dateLeft.year === dateRight.year &&\r\n dateLeft.month === dateRight.month &&\r\n dateLeft.day === dateRight.day\r\n );\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public isValid(date: DateTime): boolean {\r\n return DateTime.isDateTime(date) && date.isValid;\r\n }\r\n\r\n public invalid(): DateTime {\r\n return DateTime.invalid('Invalid date');\r\n }\r\n\r\n public isDateInstance(obj: unknown): boolean {\r\n return DateTime.isDateTime(obj);\r\n }\r\n\r\n public addCalendarYears(date: DateTime, amount: number): DateTime {\r\n return date.plus({ years: Number(amount) });\r\n }\r\n\r\n public addCalendarMonths(date: DateTime, amount: number): DateTime {\r\n return date.plus({ months: Number(amount) });\r\n }\r\n\r\n public addCalendarDays(date: DateTime, amount: number): DateTime {\r\n return date.plus({ days: Number(amount) });\r\n }\r\n\r\n public setHours(date: DateTime, amount: number): DateTime {\r\n return date.set({ hour: amount });\r\n }\r\n\r\n public setMinutes(date: DateTime, amount: number): DateTime {\r\n return date.set({ minute: amount });\r\n }\r\n\r\n public setSeconds(date: DateTime, amount: number): DateTime {\r\n return date.set({ second: amount });\r\n }\r\n\r\n public createDate(\r\n year: number,\r\n month: number,\r\n date: number,\r\n hours = 0,\r\n minutes = 0,\r\n seconds = 0,\r\n ): DateTime {\r\n if (hours < 0 || hours > 23) {\r\n throw Error(`LuxonDateTimeAdapter: Invalid hours \"${hours}\". Hours must be between 0 and 23.`);\r\n }\r\n\r\n const result = DateTime.local(\r\n year,\r\n month + 1,\r\n date,\r\n hours,\r\n minutes,\r\n seconds,\r\n 0,\r\n ).setLocale(this.locale);\r\n\r\n if (!result.isValid) {\r\n throw Error(\r\n `LuxonDateTimeAdapter: Invalid date \"${date}\" for month with index \"${month}\".`,\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public clone(date: DateTime): DateTime {\r\n return DateTime.fromMillis(date.toMillis(), {\r\n zone: date.zone,\r\n locale: date.locale,\r\n });\r\n }\r\n\r\n public now(): DateTime {\r\n return DateTime.local().setLocale(this.locale);\r\n }\r\n\r\n public format(date: DateTime, displayFormat: string): string {\r\n if (!this.isValid(date)) {\r\n throw Error('LuxonDateTimeAdapter: Cannot format invalid date.');\r\n }\r\n\r\n return date.setLocale(this.locale).toFormat(displayFormat);\r\n }\r\n\r\n public parse(value: unknown, parseFormat: string | string[] | null): DateTime | null {\r\n if (value == null || value === '') {\r\n return null;\r\n }\r\n\r\n if (DateTime.isDateTime(value)) {\r\n return value.isValid ? value.setLocale(this.locale) : this.invalid();\r\n }\r\n\r\n if (value instanceof Date) {\r\n const date = DateTime.fromJSDate(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date : this.invalid();\r\n }\r\n\r\n if (typeof value === 'number') {\r\n const date = DateTime.fromMillis(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date : this.invalid();\r\n }\r\n\r\n if (typeof value !== 'string') {\r\n return this.invalid();\r\n }\r\n\r\n const formats = Array.isArray(parseFormat) ? parseFormat : parseFormat ? [parseFormat] : [];\r\n\r\n for (const format of formats) {\r\n const parsed = DateTime.fromFormat(value, format, {\r\n locale: this.locale,\r\n });\r\n\r\n if (parsed.isValid) {\r\n return parsed;\r\n }\r\n }\r\n\r\n const iso = DateTime.fromISO(value, {\r\n locale: this.locale,\r\n });\r\n\r\n return iso.isValid ? iso : this.invalid();\r\n }\r\n\r\n public deserialize(value: unknown): DateTime | null {\r\n if (value == null || value === '') {\r\n return null;\r\n }\r\n\r\n if (DateTime.isDateTime(value)) {\r\n return value.isValid ? value.setLocale(this.locale) : this.invalid();\r\n }\r\n\r\n if (value instanceof Date) {\r\n const date = DateTime.fromJSDate(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date : this.invalid();\r\n }\r\n\r\n if (typeof value === 'number') {\r\n const date = DateTime.fromMillis(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date : this.invalid();\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const date = DateTime.fromISO(value, {\r\n locale: this.locale,\r\n });\r\n\r\n return date.isValid ? date : this.invalid();\r\n }\r\n\r\n return this.invalid();\r\n }\r\n\r\n public override setLocale(locale: string): void {\r\n super.setLocale(locale || 'ru');\r\n }\r\n}\r\n","import { OwlDateTimeFormats } from './date-time-format.class';\r\n\r\nexport const OWL_LUXON_DATE_TIME_FORMATS: OwlDateTimeFormats = {\r\n parseInput: 'dd.MM.yyyy HH:mm',\r\n fullPickerInput: 'dd.MM.yyyy HH:mm',\r\n datePickerInput: 'dd.MM.yyyy',\r\n timePickerInput: 'HH:mm',\r\n monthYearLabel: 'LLL yyyy',\r\n dateA11yLabel: 'dd.MM.yyyy',\r\n monthYearA11yLabel: 'LLLL yyyy',\r\n};\r\n","/**\r\n * luxon-date-time.module\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { DateTimeAdapter } from './date-time-adapter.class';\r\nimport { OWL_DATE_TIME_FORMATS } from './date-time-format.class';\r\nimport { LuxonDateTimeAdapter } from './luxon-date-time-adapter.class';\r\nimport { OWL_LUXON_DATE_TIME_FORMATS } from './luxon-date-time-format.class';\r\n\r\n@NgModule({\r\n providers: [\r\n {\r\n provide: DateTimeAdapter,\r\n useClass: LuxonDateTimeAdapter,\r\n },\r\n ],\r\n})\r\nexport class LuxonDateTimeModule {}\r\n\r\n@NgModule({\r\n imports: [LuxonDateTimeModule],\r\n providers: [\r\n {\r\n provide: OWL_DATE_TIME_FORMATS,\r\n useValue: OWL_LUXON_DATE_TIME_FORMATS,\r\n },\r\n ],\r\n})\r\nexport class OwlLuxonDateTimeModule {}\r\n","/**\r\n * unix-timestamp-date-time-adapter.class\r\n */\r\n\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { DateTime, Info, Settings } from 'luxon';\r\n\r\nimport { DateTimeAdapter, OWL_DATE_TIME_LOCALE } from '../date-time-adapter.class';\r\n\r\n@Injectable()\r\nexport class UnixTimestampDateTimeAdapter extends DateTimeAdapter<number> {\r\n public firstMonthOfTheYear = 0;\r\n\r\n /**\r\n * Компонент выбора даты ожидает:\r\n * 0 - воскресенье\r\n * 1 - понедельник\r\n * ...\r\n * 6 - суббота\r\n */\r\n public firstDayOfTheWeek = 0;\r\n\r\n public constructor(\r\n @Optional()\r\n @Inject(OWL_DATE_TIME_LOCALE)\r\n private owlDateTimeLocale: string,\r\n ) {\r\n super();\r\n\r\n this.setLocale(owlDateTimeLocale || Settings.defaultLocale || 'ru');\r\n }\r\n\r\n public getYear(date: number): number {\r\n return this.fromTimestamp(date).year;\r\n }\r\n\r\n /**\r\n * Компонент выбора даты ожидает:\r\n * 0 - январь\r\n * 11 - декабрь\r\n *\r\n * Luxon использует:\r\n * 1 - январь\r\n * 12 - декабрь\r\n */\r\n public getMonth(date: number): number {\r\n return this.fromTimestamp(date).month - 1;\r\n }\r\n\r\n /**\r\n * Компонент выбора даты ожидает:\r\n * 0 - воскресенье\r\n * 6 - суббота\r\n *\r\n * День недели в Luxon:\r\n * 1 - понедельник\r\n * 7 - воскресенье\r\n */\r\n public getDay(date: number): number {\r\n return this.fromTimestamp(date).weekday % 7;\r\n }\r\n\r\n public getDate(date: number): number {\r\n return this.fromTimestamp(date).day;\r\n }\r\n\r\n public getHours(date: number): number {\r\n return this.fromTimestamp(date).hour;\r\n }\r\n\r\n public getMinutes(date: number): number {\r\n return this.fromTimestamp(date).minute;\r\n }\r\n\r\n public getSeconds(date: number): number {\r\n return this.fromTimestamp(date).second;\r\n }\r\n\r\n public getTime(date: number): number {\r\n return date;\r\n }\r\n\r\n public getNumDaysInMonth(date: number): number {\r\n return this.fromTimestamp(date).daysInMonth ?? 0;\r\n }\r\n\r\n public differenceInCalendarDays(dateLeft: number, dateRight: number): number {\r\n if (!this.isValid(dateLeft) || !this.isValid(dateRight)) {\r\n return Number.NaN;\r\n }\r\n\r\n return Math.round(\r\n this.fromTimestamp(dateLeft)\r\n .startOf('day')\r\n .diff(this.fromTimestamp(dateRight).startOf('day'), 'days').days,\r\n );\r\n }\r\n\r\n public getYearName(date: number): string {\r\n return this.fromTimestamp(date).toFormat('yyyy');\r\n }\r\n\r\n public getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n return Info.months(style, { locale: this.locale });\r\n }\r\n\r\n public getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const weekdays = Info.weekdays(style, { locale: this.locale });\r\n\r\n // Luxon возвращает дни недели от понедельника до воскресенья\r\n // Компонент выбора даты ожидает порядок от воскресенья до субботы\r\n return [\r\n weekdays[6],\r\n ...weekdays.slice(0, 6),\r\n ];\r\n }\r\n\r\n public getDateNames(): string[] {\r\n return Array.from({ length: 31 }, (_, index) => `${index + 1}`);\r\n }\r\n\r\n public toIso8601(date: number): string {\r\n return this.fromTimestamp(date).toISO() ?? '';\r\n }\r\n\r\n public isEqual(dateLeft: number, dateRight: number): boolean {\r\n if (!this.isValid(dateLeft) || !this.isValid(dateRight)) {\r\n return false;\r\n }\r\n\r\n return dateLeft === dateRight;\r\n }\r\n\r\n public isSameDay(dateLeft: number, dateRight: number): boolean {\r\n if (!this.isValid(dateLeft) || !this.isValid(dateRight)) {\r\n return false;\r\n }\r\n\r\n return this.fromTimestamp(dateLeft).hasSame(\r\n this.fromTimestamp(dateRight),\r\n 'day',\r\n );\r\n }\r\n\r\n public isValid(date: number): boolean {\r\n return typeof date === 'number' && Number.isFinite(date) && this.fromTimestamp(date).isValid;\r\n }\r\n\r\n public invalid(): number {\r\n return NaN;\r\n }\r\n\r\n public isDateInstance(obj: unknown): boolean {\r\n return typeof obj === 'number';\r\n }\r\n\r\n public addCalendarYears(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .plus({ years: Number(amount) })\r\n .toMillis();\r\n }\r\n\r\n public addCalendarMonths(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .plus({ months: Number(amount) })\r\n .toMillis();\r\n }\r\n\r\n public addCalendarDays(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .plus({ days: Number(amount) })\r\n .toMillis();\r\n }\r\n\r\n public setHours(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .set({ hour: amount })\r\n .toMillis();\r\n }\r\n\r\n public setMinutes(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .set({ minute: amount })\r\n .toMillis();\r\n }\r\n\r\n public setSeconds(date: number, amount: number): number {\r\n return this.fromTimestamp(date)\r\n .set({ second: amount })\r\n .toMillis();\r\n }\r\n\r\n public createDate(\r\n year: number,\r\n month: number,\r\n date: number,\r\n hours = 0,\r\n minutes = 0,\r\n seconds = 0,\r\n ): number {\r\n if (hours < 0 || hours > 23) {\r\n throw Error(`UnixTimestampDateTimeAdapter: Invalid hours \"${hours}\". Hours must be between 0 and 23.`);\r\n }\r\n\r\n const result = DateTime.local(\r\n year,\r\n month + 1,\r\n date,\r\n hours,\r\n minutes,\r\n seconds,\r\n 0,\r\n ).setLocale(this.locale);\r\n\r\n if (!result.isValid) {\r\n throw Error(\r\n `UnixTimestampDateTimeAdapter: Invalid date \"${date}\" for month with index \"${month}\".`,\r\n );\r\n }\r\n\r\n return result.toMillis();\r\n }\r\n\r\n public clone(date: number): number {\r\n return date;\r\n }\r\n\r\n public now(): number {\r\n return DateTime.local()\r\n .setLocale(this.locale)\r\n .toMillis();\r\n }\r\n\r\n /**\r\n * Форматирование с поддержкой двух видов формата:\r\n * - string => формат Luxon, например 'dd.MM.yyyy HH:mm'\r\n * - Intl.DateTimeFormatOptions => форматирование, совместимое с прежним адаптером\r\n */\r\n public format(\r\n date: number,\r\n displayFormat: string | Intl.DateTimeFormatOptions,\r\n ): string {\r\n if (!this.isValid(date)) {\r\n throw Error('UnixTimestampDateTimeAdapter: Cannot format invalid date.');\r\n }\r\n\r\n const dt = this.fromTimestamp(date);\r\n\r\n if (typeof displayFormat === 'string') {\r\n return dt.toFormat(displayFormat);\r\n }\r\n\r\n return this.stripDirectionalityCharacters(\r\n dt.toJSDate().toLocaleDateString(this.locale, displayFormat),\r\n );\r\n }\r\n\r\n public parse(value: unknown, parseFormat: string | string[] | null): number | null {\r\n if (value == null || value === '') {\r\n return null;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return this.isValid(value) ? value : this.invalid();\r\n }\r\n\r\n if (value instanceof Date) {\r\n const date = DateTime.fromJSDate(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date.toMillis() : this.invalid();\r\n }\r\n\r\n if (DateTime.isDateTime(value)) {\r\n return value.isValid\r\n ? value.setLocale(this.locale).toMillis()\r\n : this.invalid();\r\n }\r\n\r\n if (typeof value !== 'string') {\r\n return this.invalid();\r\n }\r\n\r\n if (parseFormat) {\r\n const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];\r\n\r\n for (const format of formats) {\r\n if (typeof format !== 'string') {\r\n continue;\r\n }\r\n\r\n const parsed = DateTime.fromFormat(value, format, {\r\n locale: this.locale,\r\n });\r\n\r\n if (parsed.isValid) {\r\n return parsed.toMillis();\r\n }\r\n }\r\n }\r\n\r\n const iso = DateTime.fromISO(value, {\r\n locale: this.locale,\r\n });\r\n\r\n if (iso.isValid) {\r\n return iso.toMillis();\r\n }\r\n\r\n const jsDate = DateTime.fromJSDate(new Date(value)).setLocale(this.locale);\r\n\r\n return jsDate.isValid ? jsDate.toMillis() : this.invalid();\r\n }\r\n\r\n public override deserialize(value: unknown): number | null {\r\n if (value == null || value === '') {\r\n return null;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return this.isValid(value) ? value : this.invalid();\r\n }\r\n\r\n if (value instanceof Date) {\r\n const date = DateTime.fromJSDate(value).setLocale(this.locale);\r\n\r\n return date.isValid ? date.toMillis() : this.invalid();\r\n }\r\n\r\n if (DateTime.isDateTime(value)) {\r\n return value.isValid\r\n ? value.setLocale(this.locale).toMillis()\r\n : this.invalid();\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const date = DateTime.fromISO(value, {\r\n locale: this.locale,\r\n });\r\n\r\n return date.isValid ? date.toMillis() : this.invalid();\r\n }\r\n\r\n return this.invalid();\r\n }\r\n\r\n public override setLocale(locale: string): void {\r\n super.setLocale(locale || 'ru');\r\n }\r\n\r\n private fromTimestamp(timestamp: number): DateTime {\r\n return DateTime.fromMillis(timestamp).setLocale(this.locale);\r\n }\r\n\r\n private stripDirectionalityCharacters(value: string): string {\r\n return value.replace(/[\\u200e\\u200f]/g, '');\r\n }\r\n}\r\n","/**\r\n * unix-timestamp-date-time-format.class\r\n */\r\nimport {OwlDateTimeFormats} from '../date-time-format.class';\r\n\r\nexport const OWL_UNIX_TIMESTAMP_DATE_TIME_FORMATS: OwlDateTimeFormats = {\r\n parseInput: null,\r\n fullPickerInput: {year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric'},\r\n datePickerInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\r\n timePickerInput: {hour: 'numeric', minute: 'numeric'},\r\n monthYearLabel: {year: 'numeric', month: 'short'},\r\n dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\r\n monthYearA11yLabel: {year: 'numeric', month: 'long'},\r\n};\r\n"],"mappings":"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"}