UNPKG

ng-devui

Version:

DevUI components based on Angular

640 lines 95.3 kB
import { __decorate, __metadata } from "tslib"; import { CdkOverlayOrigin } from '@angular/cdk/overlay'; import { DOCUMENT } from '@angular/common'; import { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Inject, Input, Output, Renderer2, TemplateRef, ViewChild, ViewContainerRef, forwardRef, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { I18nService } from 'ng-devui/i18n'; import { AppendToBodyDirectionsConfig, DevConfigService, WithConfig, addClassToOrigin, fadeInOut, formWithDropDown, removeClassFromOrigin, unshiftString, } from 'ng-devui/utils'; import { fromEvent } from 'rxjs'; import { debounceTime, filter, map } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "ng-devui/i18n"; import * as i2 from "ng-devui/utils"; import * as i3 from "@angular/common"; import * as i4 from "@angular/cdk/overlay"; import * as i5 from "ng-devui/button"; export class TimePickerComponent { set minTime(minTime) { this.setCurrent('minTime', minTime); this.setTimeArr(); } get minTime() { return this.getCurrent('minTime'); } set maxTime(maxTime) { this.setCurrent('maxTime', maxTime); this.setTimeArr(); } get maxTime() { return this.getCurrent('maxTime'); } set format(format) { if (this._format !== format && format) { this._format = format.toLocaleLowerCase(); this.firstList.length = 0; this.secondList.length = 0; this.thirdList.length = 0; setTimeout(() => { this.writeValue(); this.writeModelValue(this.selectedTimeFormat, true); }); } } get format() { return this._format; } set timePickerWidth(width) { if (width !== undefined) { this._timePickerWidth = width; } } get timePickerWidth() { return this._timePickerWidth; } set isOpen(open) { if (this._isOpen !== open) { this._isOpen = open; if (!open) { this.startAnimation = false; removeClassFromOrigin(this.elementRef); this.document.removeEventListener('click', this.onDocumentClick); } else { if (this.timePickerWidth !== undefined) { this.originWidth = this.timePickerWidth; } else { let currentOrigin; if (this.origin) { currentOrigin = this.origin; } else if (this.elementRef.nativeElement) { currentOrigin = formWithDropDown(this.elementRef) || this.elementRef.nativeElement; } if (currentOrigin) { this.originWidth = currentOrigin.offsetWidth; } } setTimeout(() => { this.startAnimation = true; this.document.addEventListener('click', this.onDocumentClick); }); addClassToOrigin(this.elementRef); } } } get isOpen() { return this._isOpen; } set selectedTime(time) { if (this.validateTime(time)) { this.setFormatCurrent('selectedTime', time); } else { this.setFormatCurrent('selectedTime', this.initTime); } } get selectedTime() { return this.getCurrent('selectedTime'); } get selectedTimeFormat() { return this.getFormatCurrent('selectedTime'); } get initTime() { return this.getCurrent('initTime'); } get illegalTime() { return this.getCurrent('illegalTime'); } constructor(elementRef, viewContainerRef, renderer2, i18n, cdr, devConfigService, doc) { this.elementRef = elementRef; this.viewContainerRef = viewContainerRef; this.renderer2 = renderer2; this.i18n = i18n; this.cdr = cdr; this.devConfigService = devConfigService; this.doc = doc; this.appendToBodyDirections = ['rightDown', 'leftDown', 'rightUp', 'leftUp']; this.autoOpen = false; this.showAnimation = true; this.splitter = ':'; // 暂不开放 this.startAnimation = false; this.selectedTimeChange = new EventEmitter(); this.dropdownPosition = 'bottom'; // 此处使用第一第二第三列而不是时分秒是为了方便在format顺序变化(例如ss:mm)时,可以比较容易的换数组顺序 this.firstList = []; this.secondList = []; this.thirdList = []; this._isOpen = false; this._minTimeHour = '00'; this._minTimeMin = '00'; this._minTimeSec = '00'; this._maxTimeHour = '23'; this._maxTimeMin = '59'; this._maxTimeSec = '59'; this._format = 'hh:mm:ss'; this._initTimeHour = '00'; this._initTimeMin = '00'; this._initTimeSec = '00'; this._illegalTimeHour = '24'; this._illegalTimeMin = '60'; this._illegalTimeSec = '60'; this.correct = ['Hour', 'Min', 'Sec']; this.onChange = (_) => null; this.onTouched = () => null; this.onDocumentClick = ($event) => { if (this.elementRef.nativeElement !== $event.target && this.timePicker && !this.timePicker.nativeElement.contains($event.target)) { this.isOpen = false; this.cdr.markForCheck(); } }; this.hide = () => { this.isOpen = false; }; this.transUserInputToTimePicker = (value) => { if (!value) { this.clearAll(); return; } if (value === this.selectedTime || !this.validateTime(value)) { return; } if (this.disabled) { this.resetValue(); } else { this.writeValue(value); this.writeModelValue(value, true); } }; this.chooseTime = (timeObj) => { this.selectTime(timeObj, true); }; this.confirmTime = (timeObj) => { this.selectTime(timeObj); this.hide(); }; this.clearAll = () => { if (this.disabled) { return; } this.writeValue(null); this.writeModelValue(null, true); }; this.document = this.doc; } onBlur($event) { this.onTouched(); const value = this.elementRef.nativeElement.value; if (!this.validateTime(value)) { this.resetValue(); } } ngOnChanges(changes) { if (changes.appendToBodyDirections) { this.setTimePickerPositions(); } } ngOnInit() { this.setTimePickerPositions(); this.setI18nText(); this.updateCdkConnectedOverlayOrigin(); if (this.autoOpen) { this.toggle(true); } this.valueChanges = this.registerInputEvent(); this.userInputSubscription = this.valueChanges.subscribe((source) => this.transUserInputToTimePicker(source)); } ngOnDestroy() { if (this.i18nSubscription) { this.i18nSubscription.unsubscribe(); } if (this.userInputSubscription) { this.userInputSubscription.unsubscribe(); } this.document.removeEventListener('click', this.onDocumentClick); } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } writeValue(time) { if (time !== undefined) { this.selectedTime = time; } const value = this.selectedTimeFormat || ''; this.renderer2.setProperty(this.elementRef.nativeElement, 'value', value); this.setTimeArr(); } registerInputEvent() { return fromEvent(this.elementRef.nativeElement, 'input').pipe(map((e) => { return e.target.value; }), filter(() => !this.disabled), debounceTime(300)); } isMinuteInRange(minute) { const curTime = this.elementRef.nativeElement.value; const hourIndex = this.format.split(':').findIndex((t) => t === 'hh'); const curHour = hourIndex !== -1 ? curTime.split(':')[hourIndex] : null; // 不存在小时时直接依据最值判定 if (!curHour) { return minute <= this._maxTimeMin && minute >= this._minTimeMin; } // 存在小时时,依据小时是否在临界点进行判断 if (curHour < this._maxTimeHour && curHour > this._minTimeHour) { return true; } else if (curHour === this._maxTimeHour) { return minute <= this._maxTimeMin; } else if (curHour === this._minTimeHour) { return minute >= this._minTimeMin; } else { return true; } } isSecondInRange(second) { const curTime = this.elementRef.nativeElement.value; const hourIndex = this.format.split(':').findIndex((t) => t === 'hh'); const minIndex = this.format.split(':').findIndex((t) => t === 'mm'); const curHour = hourIndex !== -1 ? curTime.split(':')[hourIndex] : null; const curMin = minIndex !== -1 ? curTime.split(':')[minIndex] : null; // 当不存在分钟时,直接依据最值判定 if (!curMin) { return second <= this._maxTimeSec && second >= this._minTimeSec; } // 当存在分钟时,依据分钟是否在临界点进行判断 if (this.isMinuteInRangeNotBoundary(curHour, curMin)) { return true; } else if (curMin === this._maxTimeMin) { return second <= this._maxTimeSec; } else if (curMin === this._minTimeMin) { return second >= this._minTimeSec; } else { return true; } } // 判断当前的分钟是否在范围内但不在边界上 isMinuteInRangeNotBoundary(hour, min) { return ((hour && hour < this._maxTimeHour && hour > this._minTimeHour) || // 小时在范围内 (min < this._maxTimeMin && min > this._minTimeMin)); // 分钟在范围内 } validateTime(time, type) { if (!time && time !== '') { return false; } const timeArr = time.split(':'); if (type && timeArr.length === 1) { let valid; switch (type) { case 'hh': valid = time <= this._maxTimeHour && time >= this._minTimeHour; break; case 'mm': valid = this.isMinuteInRange(time); break; case 'ss': valid = this.isSecondInRange(time); break; default: } return valid; } if (timeArr.some((t, i) => { return Number(t) > Number(this.maxTime.split(':')[i]) || Number(t) < Number(this.minTime.split(':')[i]); })) { return false; } if (timeArr.length !== 3) { if (timeArr.length === this.format.split(':').length && !timeArr.some((t) => t.length > 2 || t !== unshiftString(String(Number(t)), 2, '0'))) { return true; } else { return false; } } else if (timeArr.some((t) => t !== unshiftString(String(Number(t)), 2, '0'))) { return false; } return true; } setI18nText() { this.i18nCommonText = this.i18n.getI18nText().common; this.i18nSubscription = this.i18n.langChange().subscribe((data) => { this.i18nCommonText = data.common; }); } updateCdkConnectedOverlayOrigin() { let currentOrigin; if (this.origin) { currentOrigin = this.origin; } else if (this.elementRef.nativeElement) { currentOrigin = formWithDropDown(this.elementRef) || this.elementRef.nativeElement; } this.cdkConnectedOverlayOrigin = new CdkOverlayOrigin(currentOrigin); } toggle(clickShow) { if (clickShow === undefined) { if (this.disabled) { this.isOpen = false; } else { this.isOpen = !this.isOpen; } } else { if (this.disabled) { this.isOpen = false; } else { this.isOpen = clickShow; } } } writeModelValue(selectTimeObj, noEmit = false) { let selectTime; if (selectTimeObj && typeof selectTimeObj === 'object' && Object.prototype.hasOwnProperty.call(selectTimeObj, 'selectedTime')) { selectTime = selectTimeObj.selectedTime; } else { selectTime = selectTimeObj; } selectTime = selectTime || null; this.onChange(selectTime); // 这行代码能触发ngModel绑定的变量值发生变化 if (!noEmit) { this.selectedTimeChange.emit(this.selectedTimeFormat); } } onPositionChange(position) { switch (position.connectionPair.overlayY) { case 'top': case 'center': this.dropdownPosition = 'bottom'; break; case 'bottom': this.dropdownPosition = 'top'; break; default: } } setTimePickerPositions() { if (this.appendToBodyDirections && this.appendToBodyDirections.length > 0) { this.pickerPositions = this.appendToBodyDirections .map((position) => { if (typeof position === 'string') { return AppendToBodyDirectionsConfig[position]; } else { return position; } }) .filter((position) => position !== undefined); } else { this.pickerPositions = undefined; } } resetValue() { if (this.selectedTime) { this.writeValue(this.selectedTime); } else { this.elementRef.nativeElement.value = ''; } } setTimeArr(justScroll) { this.format.split(':').forEach((type, index) => this.setSingleTimeArr(index, justScroll)); } setSingleTimeArr(index, justScroll) { const selectedTimeArr = this.selectedTime ? this.selectedTime.split(':') : this.illegalTime.split(':'); let whichList; switch (index) { case 0: whichList = 'first'; break; case 1: whichList = 'second'; break; case 2: whichList = 'third'; break; default: } const type = this.format.split(':')[index]; const arr = ['hh', 'mm', 'ss']; const len = type === 'hh' ? 24 : 60; if (!this[`${whichList}List`] || !this[`${whichList}List`].length) { this[`${whichList}List`] = new Array(len).fill(0).map((item, i) => { const time = unshiftString(String(i), 2, '0'); const disabled = this.disabled || !this.validateTime(time, type); return { time, active: selectedTimeArr[arr.indexOf(type)] === time, type: index, disabled, }; }); } else { this[`${whichList}List`].forEach((item, i) => { if (!justScroll) { const time = unshiftString(String(i), 2, '0'); const disabled = this.disabled || !this.validateTime(time, type); item.active = selectedTimeArr[arr.indexOf(type)] === time; item.disabled = disabled; } if (item.active && this.isOpen) { this.setScroll(whichList, i, justScroll); } }); } if (!this.disabled) { this.fixTimeInRange(this[`${whichList}List`]); } } // 当存在值选中的是不可选选项时,进行修正 fixTimeInRange(list) { const curActive = list.find((item) => item.active); if (curActive?.disabled) { this.selectTime(list.find((item) => !item.disabled)); } } setScroll(whichList, index, justScroll) { const scroll = (24 + 8) * index; const duration = justScroll || !this.showAnimation ? 0 : 150; if (this.timePicker) { this.scrollTo(this.timePicker.nativeElement.querySelector(`.devui-${whichList}-list`), scroll, duration); } } scrollTo(element, to, duration) { if (typeof window === 'undefined') { return; } if (duration <= 0) { element.scrollTop = to; return; } const difference = to - element.scrollTop; const perTick = (difference / duration) * 10; const reqAnimFrame = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame || window.requestAnimationFrame; reqAnimFrame(() => { element.scrollTop = element.scrollTop + perTick; if (element.scrollTop === to) { return; } this.scrollTo(element, to, duration - 10); }); } animationEnd(event) { if (this.isOpen && event.toState !== 'void') { this.setTimeArr(true); } } setCurrent(which, current) { const timeArr = current ? current.split(':') : this[which].split(':'); this.correct.forEach((t, i) => { this[`_${which}${t}`] = timeArr[i]; }); } getCurrent(which) { const res = []; this.correct.forEach((t) => res.push(this[`_${which}${t}`])); return res.join(':'); } setFormatCurrent(which, current) { const timeArr = current ? current.split(':') : this[which].split(':'); this.format.split(':').forEach((t, i) => { switch (t) { case 'hh': this[`_${which}Hour`] = timeArr[i]; break; case 'mm': this[`_${which}Min`] = timeArr[i]; break; case 'ss': this[`_${which}Sec`] = timeArr[i]; break; default: } }); } getFormatCurrent(which) { const formatArr = this.format.split(':'); const res = []; formatArr.forEach((t) => { switch (t) { case 'hh': res.push(this[`_${which}Hour`]); break; case 'mm': res.push(this[`_${which}Min`]); break; case 'ss': res.push(this[`_${which}Sec`]); break; default: } }); return res.join(':'); } selectTime(timeObj, noEmit) { if (timeObj !== undefined) { const time = timeObj.time; const type = timeObj.type; const timeArr = time.split(':'); const curType = typeof type === 'string' ? type : this.format.split(':')[type]; let typeArr; if (!this.validateTime(time, curType)) { return; } if (typeof type === 'number') { typeArr = [this.format.split(':')[type]]; } else if (typeof type === 'string') { typeArr = [type]; } else if (!type) { typeArr = this.format.split(':'); } typeArr.forEach((t, i) => { switch (t) { case 'hh': this._selectedTimeHour = unshiftString(timeArr[i], 2, '0'); break; case 'mm': this._selectedTimeMin = unshiftString(timeArr[i], 2, '0'); break; case 'ss': this._selectedTimeSec = unshiftString(timeArr[i], 2, '0'); break; default: } }); } this.writeValue(); this.writeModelValue(this.selectedTimeFormat, noEmit); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimePickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.Renderer2 }, { token: i1.I18nService }, { token: i0.ChangeDetectorRef }, { token: i2.DevConfigService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TimePickerComponent, selector: "[dTimePicker]", inputs: { appendToBodyDirections: "appendToBodyDirections", disabled: "disabled", customViewTemplate: "customViewTemplate", autoOpen: "autoOpen", showAnimation: "showAnimation", minTime: "minTime", maxTime: "maxTime", format: "format", timePickerWidth: "timePickerWidth" }, outputs: { selectedTimeChange: "selectedTimeChange" }, host: { listeners: { "blur": "onBlur($event)" } }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimePickerComponent), multi: true, }, ], viewQueries: [{ propertyName: "timePicker", first: true, predicate: ["timePicker"], descendants: true }], exportAs: ["timePicker"], usesOnChanges: true, ngImport: i0, template: "<ng-template\n cdk-connected-overlay\n [cdkConnectedOverlayOrigin]=\"cdkConnectedOverlayOrigin\"\n [cdkConnectedOverlayWidth]=\"originWidth\"\n [cdkConnectedOverlayPositions]=\"pickerPositions\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n (backdropClick)=\"isOpen = false\"\n (positionChange)=\"onPositionChange($event)\"\n>\n <div\n [@fadeInOut]=\"startAnimation ? dropdownPosition : 'void'\"\n (@fadeInOut.done)=\"animationEnd($event)\"\n [@.disabled]=\"!showAnimation\"\n class=\"devui-time-picker-wrapper devui-dropdown-menu\"\n #timePicker\n >\n <div class=\"devui-time-picker\" [ngClass]=\"{ 'devui-time-picker-animation': showAnimation }\">\n <ul *ngIf=\"firstList.length\" class=\"devui-time-list devui-first-list\">\n <li\n *ngFor=\"let item of firstList\"\n class=\"devui-time-item devui-first-item\"\n [ngClass]=\"{\n active: item.active,\n disabled: item.disabled\n }\"\n (click)=\"chooseTime(item)\"\n >\n {{ item.time }}\n </li>\n </ul>\n <ul *ngIf=\"secondList.length\" class=\"devui-time-list devui-second-list\">\n <li\n *ngFor=\"let item of secondList\"\n class=\"devui-time-item devui-second-item\"\n [ngClass]=\"{\n active: item.active,\n disabled: item.disabled\n }\"\n (click)=\"chooseTime(item)\"\n >\n {{ item.time }}\n </li>\n </ul>\n <ul *ngIf=\"thirdList.length\" class=\"devui-time-list devui-third-list\">\n <li\n *ngFor=\"let item of thirdList\"\n class=\"devui-time-item devui-third-item\"\n [ngClass]=\"{\n active: item.active,\n disabled: item.disabled\n }\"\n (click)=\"chooseTime(item)\"\n >\n {{ item.time }}\n </li>\n </ul>\n </div>\n <div class=\"devui-time-footer\">\n <ng-container *ngIf=\"!customViewTemplate\">\n <div class=\"devui-btn-wrapper\">\n <d-button bsStyle=\"common\" [disabled]=\"disabled\" (btnClick)=\"confirmTime()\" bsSize=\"sm\"\n >{{ i18nCommonText?.btnConfirm }}\n </d-button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"customViewTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"customViewTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: this, chooseTime: chooseTime, clearAll: clearAll, confirmTime: confirmTime }\"\n ></ng-template>\n </ng-container>\n </div>\n </div>\n</ng-template>\n", styles: [".devui-time-picker-wrapper{width:100%;min-width:184px;background-color:var(--devui-connected-overlay-bg, #ffffff);box-shadow:var(--devui-shadow-length-connected-overlay, 0 4px 12px 0) var(--devui-shadow, rgba(0, 0, 0, .16));display:block;position:unset}.devui-time-picker{display:flex;height:248px;overflow:hidden;border-bottom:1px solid var(--devui-dividing-line, #f0f0f0);border-radius:var(--devui-border-radius, 2px) var(--devui-border-radius, 2px) 0 0}.devui-time-picker-animation .devui-time-list{scroll-behavior:smooth}.devui-time-picker .devui-time-list{flex:1;overflow-y:hidden;overflow-x:hidden;scrollbar-gutter:stable;padding-left:4px}.devui-time-picker .devui-time-list::-webkit-scrollbar{width:4px}.devui-time-picker .devui-time-list:hover{overflow-y:scroll}.devui-time-picker .devui-time-list:not(:last-child){border-right:1px solid var(--devui-dividing-line, #f0f0f0)}.devui-time-picker .devui-time-list .devui-time-item{width:100%;height:24px;line-height:24px;text-align:center;cursor:pointer;border-radius:var(--devui-border-radius-feedback, 4px)}.devui-time-picker .devui-time-list .devui-time-item:hover{color:var(--devui-list-item-hover-text, #000000);background-color:var(--devui-list-item-hover-bg, #f2f2f3)}.devui-time-picker .devui-time-list .devui-time-item.active{color:var(--devui-list-item-active-text, #000000);background-color:var(--devui-list-item-active-bg, #cedefd)}.devui-time-picker .devui-time-list .devui-time-item.disabled{color:var(--devui-disabled-text, #c2c2c2);background-color:var(--devui-disabled-bg, #f3f3f3)}.devui-time-picker .devui-time-list .devui-time-item:not(:last-child){margin-bottom:8px}.devui-time-picker .devui-time-list .devui-time-item:last-child{margin-bottom:224px}.devui-time-footer{padding:8px 16px;overflow:hidden}.devui-time-footer .devui-btn-wrapper{float:right}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: i5.ButtonComponent, selector: "d-button", inputs: ["id", "type", "bsStyle", "shape", "bsSize", "bsPosition", "bordered", "icon", "disabled", "showLoading", "width", "autofocus", "loadingTemplateRef"], outputs: ["btnClick"] }], animations: [fadeInOut] }); } } __decorate([ WithConfig(), __metadata("design:type", Object) ], TimePickerComponent.prototype, "showAnimation", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimePickerComponent, decorators: [{ type: Component, args: [{ selector: '[dTimePicker]', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimePickerComponent), multi: true, }, ], exportAs: 'timePicker', animations: [fadeInOut], template: "<ng-template\n cdk-connected-overlay\n [cdkConnectedOverlayOrigin]=\"cdkConnectedOverlayOrigin\"\n [cdkConnectedOverlayWidth]=\"originWidth\"\n [cdkConnectedOverlayPositions]=\"pickerPositions\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n (backdropClick)=\"isOpen = false\"\n (positionChange)=\"onPositionChange($event)\"\n>\n <div\n [@fadeInOut]=\"startAnimation ? dropdownPosition : 'void'\"\n (@fadeInOut.done)=\"animationEnd($event)\"\n [@.disabled]=\"!showAnimation\"\n class=\"devui-time-picker-wrapper devui-dropdown-menu\"\n #timePicker\n >\n <div class=\"devui-time-picker\" [ngClass]=\"{ 'devui-time-picker-animation': showAnimation }\">\n <ul *ngIf=\"firstList.length\" class=\"devui-time-list devui-first-list\">\n <li\n *ngFor=\"let item of firstList\"\n class=\"devui-time-item devui-first-item\"\n [ngClass]=\"{\n active: item.active,\n disabled: item.disabled\n }\"\n (click)=\"chooseTime(item)\"\n >\n {{ item.time }}\n </li>\n </ul>\n <ul *ngIf=\"secondList.length\" class=\"devui-time-list devui-second-list\">\n <li\n *ngFor=\"let item of secondList\"\n class=\"devui-time-item devui-second-item\"\n [ngClass]=\"{\n active: item.active,\n disabled: item.disabled\n }\"\n (click)=\"chooseTime(item)\"\n >\n {{ item.time }}\n </li>\n </ul>\n <ul *ngIf=\"thirdList.length\" class=\"devui-time-list devui-third-list\">\n <li\n *ngFor=\"let item of thirdList\"\n class=\"devui-time-item devui-third-item\"\n [ngClass]=\"{\n active: item.active,\n disabled: item.disabled\n }\"\n (click)=\"chooseTime(item)\"\n >\n {{ item.time }}\n </li>\n </ul>\n </div>\n <div class=\"devui-time-footer\">\n <ng-container *ngIf=\"!customViewTemplate\">\n <div class=\"devui-btn-wrapper\">\n <d-button bsStyle=\"common\" [disabled]=\"disabled\" (btnClick)=\"confirmTime()\" bsSize=\"sm\"\n >{{ i18nCommonText?.btnConfirm }}\n </d-button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"customViewTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"customViewTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: this, chooseTime: chooseTime, clearAll: clearAll, confirmTime: confirmTime }\"\n ></ng-template>\n </ng-container>\n </div>\n </div>\n</ng-template>\n", styles: [".devui-time-picker-wrapper{width:100%;min-width:184px;background-color:var(--devui-connected-overlay-bg, #ffffff);box-shadow:var(--devui-shadow-length-connected-overlay, 0 4px 12px 0) var(--devui-shadow, rgba(0, 0, 0, .16));display:block;position:unset}.devui-time-picker{display:flex;height:248px;overflow:hidden;border-bottom:1px solid var(--devui-dividing-line, #f0f0f0);border-radius:var(--devui-border-radius, 2px) var(--devui-border-radius, 2px) 0 0}.devui-time-picker-animation .devui-time-list{scroll-behavior:smooth}.devui-time-picker .devui-time-list{flex:1;overflow-y:hidden;overflow-x:hidden;scrollbar-gutter:stable;padding-left:4px}.devui-time-picker .devui-time-list::-webkit-scrollbar{width:4px}.devui-time-picker .devui-time-list:hover{overflow-y:scroll}.devui-time-picker .devui-time-list:not(:last-child){border-right:1px solid var(--devui-dividing-line, #f0f0f0)}.devui-time-picker .devui-time-list .devui-time-item{width:100%;height:24px;line-height:24px;text-align:center;cursor:pointer;border-radius:var(--devui-border-radius-feedback, 4px)}.devui-time-picker .devui-time-list .devui-time-item:hover{color:var(--devui-list-item-hover-text, #000000);background-color:var(--devui-list-item-hover-bg, #f2f2f3)}.devui-time-picker .devui-time-list .devui-time-item.active{color:var(--devui-list-item-active-text, #000000);background-color:var(--devui-list-item-active-bg, #cedefd)}.devui-time-picker .devui-time-list .devui-time-item.disabled{color:var(--devui-disabled-text, #c2c2c2);background-color:var(--devui-disabled-bg, #f3f3f3)}.devui-time-picker .devui-time-list .devui-time-item:not(:last-child){margin-bottom:8px}.devui-time-picker .devui-time-list .devui-time-item:last-child{margin-bottom:224px}.devui-time-footer{padding:8px 16px;overflow:hidden}.devui-time-footer .devui-btn-wrapper{float:right}\n"] }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i0.Renderer2 }, { type: i1.I18nService }, { type: i0.ChangeDetectorRef }, { type: i2.DevConfigService }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }], propDecorators: { appendToBodyDirections: [{ type: Input }], disabled: [{ type: Input }], customViewTemplate: [{ type: Input }], autoOpen: [{ type: Input }], showAnimation: [{ type: Input }], selectedTimeChange: [{ type: Output }], timePicker: [{ type: ViewChild, args: ['timePicker'] }], minTime: [{ type: Input }], maxTime: [{ type: Input }], format: [{ type: Input }], timePickerWidth: [{ type: Input }], onBlur: [{ type: HostListener, args: ['blur', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBNEUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsSSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFpQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUVMLDRCQUE0QixFQUM1QixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixhQUFhLEdBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQTRCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQXdCM0QsTUFBTSxPQUFPLG1CQUFtQjtJQStDOUIsSUFBYSxPQUFPLENBQUMsT0FBZTtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxJ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