com.phloxui
Version:
PhloxUI Ng2+ Framework
1,150 lines (1,148 loc) • 99.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core';
import { AbstractDateTimePicker } from './AbstractDateTimePicker';
import { NeedFocusService } from '../../../service/NeedFocusService.service';
import { DateFormatter } from '../../../share/formatter/DateFormatter';
import { ValidationStatus } from '../../../component/validate/ValidationStatus';
import { FormatterFactory } from '../../../service/FormatterFactory.service';
import { Option } from '../../../decorator/Option.decorator';
import { I18N } from '../../../decorator/I18N.decorator';
import { PhloxAppInfoService } from '../../../service/PhloxAppInfoService.service';
const /** @type {?} */ TYPE_NAME = "phx-time-picker";
const /** @type {?} */ DEFAULT_RANGE = 2;
const /** @type {?} */ GAP_HEIGHT = 2;
const /** @type {?} */ GAP_TIME_HEIGHT = 5;
const /** @type {?} */ HOUR = "HOUR";
const /** @type {?} */ MIN = "MIN";
const /** @type {?} */ SEC = "SEC";
const /** @type {?} */ DEFAULT_SHOW_SECOND_DATA_PATTERN = "HH:mm:ss";
const /** @type {?} */ DEFAULT_HIDE_SECOND_DATA_PATTERN = "HH:mm";
export class TimePicker extends AbstractDateTimePicker {
/**
* @param {?} elementRef
* @param {?} needFocusService
* @param {?} formatterFactory
* @param {?} phloxAppInfoService
*/
constructor(elementRef, needFocusService, formatterFactory, phloxAppInfoService) {
super(elementRef, formatterFactory, phloxAppInfoService, needFocusService);
this.HOUR = HOUR;
this.MIN = MIN;
this.SEC = SEC;
this.active = false;
this._isItemClick = false;
this.rangeHour = [];
this.rangeMin = [];
this.rangeSec = [];
}
/**
* @param {?} hide
* @return {?}
*/
set hideSecond(hide) {
this.setHideSecond(hide);
}
/**
* @return {?}
*/
get hideSecond() {
return this.isHideSecond();
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
if (this.range === null || this.range === undefined) {
this.range = DEFAULT_RANGE;
}
}
/**
* @param {?} localDate
* @return {?}
*/
updateSelectedDateLocal(localDate) {
if (localDate === null || typeof localDate === 'undefined') {
localDate = new Date();
}
this.updateSelectedTimeLocal(localDate.getHours(), localDate.getMinutes(), localDate.getSeconds());
}
/**
* @param {?} hour
* @param {?} min
* @param {?} sec
* @return {?}
*/
updateSelectedTimeLocal(hour, min, sec) {
let /** @type {?} */ selectedDate = this.getSelectedDate();
let /** @type {?} */ tzDiff = this.getTimeZoneDiff(selectedDate);
let /** @type {?} */ tzDiffHours = Math.floor(tzDiff / 100);
let /** @type {?} */ tzDiffMins = tzDiff % 100;
if (typeof hour === 'number') {
selectedDate.setHours(hour + tzDiffHours);
}
if (typeof min === 'number') {
selectedDate.setMinutes(min + tzDiffMins);
}
if (typeof sec === 'number') {
selectedDate.setSeconds(sec);
}
this.setDate(selectedDate);
}
/**
* @return {?}
*/
updateUI() {
let /** @type {?} */ selectedDate = this.getSelectedDate();
let /** @type {?} */ tzDiff = this.getTimeZoneDiff(selectedDate);
let /** @type {?} */ tzDiffHours = Math.floor(tzDiff / 100);
let /** @type {?} */ tzDiffMins = tzDiff % 100;
// Update hour
this.selectedHour = selectedDate.getHours() - tzDiffHours;
if (this.selectedHour < 0) {
this.selectedHour += 24;
}
// Update min
this.selectedMin = selectedDate.getMinutes() - tzDiffMins;
if (this.selectedMin < 0) {
this.selectedMin += 60;
}
// Update sec
this.selectedSec = selectedDate.getSeconds();
// Update new calculated selected hour, min & sec to UI.
this.calculateTime();
}
/**
* @return {?}
*/
calculatePopupPosition() {
let /** @type {?} */ popup = $(this.elementRef.nativeElement).find('.time-picker-view');
this.elementFocused = $(document.activeElement);
this.positionTop = this.elementFocused.position().top + this.elementFocused.height() + GAP_HEIGHT;
this.positionTop += GAP_TIME_HEIGHT;
let /** @type {?} */ ele;
// Default value
this.positionLeft = 0;
let /** @type {?} */ screenTop = this.elementFocused.offset().top - $(window).scrollTop() + this.elementFocused.height() + GAP_HEIGHT;
let /** @type {?} */ screenBottom = screenTop + popup.height();
let /** @type {?} */ screenLeft = this.elementFocused.offset().left - $(window).scrollLeft();
let /** @type {?} */ screenRight = screenLeft + popup.width();
if (screenTop < 0) {
this.positionTop += -screenTop;
this.positionTop += GAP_TIME_HEIGHT;
}
else if (screenBottom > $(window).height()) {
this.positionTop -= screenBottom - $(window).height();
this.positionTop -= GAP_TIME_HEIGHT;
}
if (screenLeft < 0) {
this.positionLeft += -screenLeft;
}
else if (screenRight > $(window).width()) {
this.positionLeft -= screenRight - $(window).width();
}
}
/**
* @return {?}
*/
requestFocus() {
let /** @type {?} */ input = $(this.elementRef.nativeElement).find('input[type="text"]');
input.focus();
}
/**
* @return {?}
*/
calculateTime() {
this.rangeHour = this.calHourRange();
this.rangeMin = this.calMinRange();
this.rangeSec = this.calSecRange();
}
/**
* @return {?}
*/
calHourRange() {
let /** @type {?} */ cuerrentDate = new Date();
let /** @type {?} */ lengthData;
let /** @type {?} */ rangeDataArray = [];
let /** @type {?} */ upStartData = this.selectedHour;
let /** @type {?} */ downStartData = this.selectedHour;
for (let /** @type {?} */ i = 0; i < this.range; i++) {
let /** @type {?} */ dataVal;
let /** @type {?} */ arg = [];
cuerrentDate.setHours(upStartData);
cuerrentDate.addHours(-1);
dataVal = cuerrentDate.getHours();
upStartData = dataVal;
rangeDataArray.push(dataVal);
if (i === 1) {
rangeDataArray.reverse();
}
}
this.sortDataList(rangeDataArray); // orderby asc
rangeDataArray.push(this.selectedHour);
for (let /** @type {?} */ i = 0; i < this.range; i++) {
let /** @type {?} */ dataVal;
cuerrentDate.setHours(downStartData);
cuerrentDate.addHours(1);
dataVal = cuerrentDate.getHours();
downStartData = dataVal;
rangeDataArray.push(dataVal);
}
return rangeDataArray;
}
/**
* @return {?}
*/
calMinRange() {
let /** @type {?} */ cuerrentDate = new Date();
let /** @type {?} */ lengthData;
let /** @type {?} */ rangeDataArray = [];
let /** @type {?} */ upStartData = this.selectedMin;
let /** @type {?} */ downStartData = this.selectedMin;
for (let /** @type {?} */ i = 0; i < this.range; i++) {
let /** @type {?} */ dataVal;
cuerrentDate.setMinutes(upStartData);
cuerrentDate.addMinutes(-1);
dataVal = cuerrentDate.getMinutes();
upStartData = dataVal;
rangeDataArray.push(dataVal);
if (i === 1) {
rangeDataArray.reverse();
}
}
this.sortDataList(rangeDataArray); // orderby asc
rangeDataArray.push(this.selectedMin);
for (let /** @type {?} */ i = 0; i < this.range; i++) {
let /** @type {?} */ dataVal;
cuerrentDate.setMinutes(downStartData);
cuerrentDate.addMinutes(1);
dataVal = cuerrentDate.getMinutes();
downStartData = dataVal;
rangeDataArray.push(dataVal);
}
return rangeDataArray;
}
/**
* @return {?}
*/
calSecRange() {
let /** @type {?} */ cuerrentDate = new Date();
let /** @type {?} */ lengthData;
let /** @type {?} */ rangeDataArray = [];
let /** @type {?} */ upStartData = this.selectedSec;
let /** @type {?} */ downStartData = this.selectedSec;
for (let /** @type {?} */ i = 0; i < this.range; i++) {
let /** @type {?} */ dataVal;
cuerrentDate.setSeconds(upStartData);
cuerrentDate.addSeconds(-1);
dataVal = cuerrentDate.getSeconds();
upStartData = dataVal;
rangeDataArray.push(dataVal);
if (i === 1) {
rangeDataArray.reverse();
}
}
this.sortDataList(rangeDataArray); // orderby asc
rangeDataArray.push(this.selectedSec);
for (let /** @type {?} */ i = 0; i < this.range; i++) {
let /** @type {?} */ dataVal;
cuerrentDate.setSeconds(downStartData);
cuerrentDate.addSeconds(1);
dataVal = cuerrentDate.getSeconds();
downStartData = dataVal;
rangeDataArray.push(dataVal);
}
return rangeDataArray;
}
/**
* @param {?} $event
* @return {?}
*/
onUpArrowHour($event) {
let /** @type {?} */ selectedDate = this.getSelectedDate();
selectedDate.addHours(-1);
this.setDate(selectedDate);
}
/**
* @param {?} $event
* @return {?}
*/
onDownArrowHour($event) {
let /** @type {?} */ selectedDate = this.getSelectedDate();
selectedDate.addHours(1);
this.setDate(selectedDate);
}
/**
* @param {?} $event
* @return {?}
*/
onUpArrowMin($event) {
let /** @type {?} */ selectedDate = this.getSelectedDate();
selectedDate.addMinutes(-1);
this.setDate(selectedDate);
}
/**
* @param {?} $event
* @return {?}
*/
onDownArrowMin($event) {
let /** @type {?} */ selectedDate = this.getSelectedDate();
selectedDate.addMinutes(1);
this.setDate(selectedDate);
}
/**
* @param {?} $event
* @return {?}
*/
onUpArrowSec($event) {
let /** @type {?} */ selectedDate = this.getSelectedDate();
selectedDate.addSeconds(-1);
this.setDate(selectedDate);
}
/**
* @param {?} $event
* @return {?}
*/
onDownArrowSec($event) {
let /** @type {?} */ selectedDate = this.getSelectedDate();
selectedDate.addSeconds(1);
this.setDate(selectedDate);
}
/**
* @param {?} date
* @return {?}
*/
isMinMaxValidate(date) {
if (date !== null && typeof date !== 'undefined') {
date.setMilliseconds(0);
let /** @type {?} */ results = this.validate(date);
return this.isValidFromValidationResults(results);
}
return false;
}
/**
* @param {?} objArray
* @return {?}
*/
sortDataList(objArray) {
if (objArray === null || typeof objArray === 'undefined') {
return;
}
objArray.sort(function (obj1, obj2) {
if ((obj1 === null || typeof obj1 === 'undefined') && (obj2 !== null && typeof obj2 !== 'undefined')) {
return 0;
}
else if ((obj1 !== null && typeof obj1 !== 'undefined') && (obj2 === null || typeof obj2 === 'undefined')) {
return -1;
}
else if ((obj1 === null || typeof obj1 === 'undefined') && (obj2 === null || typeof obj2 === 'undefined')) {
return 1;
}
let /** @type {?} */ code1 = obj1.code;
let /** @type {?} */ code2 = obj2.code;
if ((code1 === null || typeof code1 === 'undefined') && (code2 !== null && typeof code2 !== 'undefined')) {
return 0;
}
else if ((code1 !== null && typeof code1 !== 'undefined') && (code2 === null || typeof code2 === 'undefined')) {
return -1;
}
else if ((code1 === null || typeof code1 === 'undefined') && (code2 === null || typeof code2 === 'undefined')) {
return 1;
}
if (code1 < code2) {
return 0;
}
else if (code1 > code2) {
return 1;
}
return -1;
});
}
/**
* @param {?} results
* @return {?}
*/
isValidFromValidationResults(results) {
if (results !== null && typeof results !== 'undefined') {
for (let /** @type {?} */ result of results) {
let /** @type {?} */ status = result.status;
if (result.status === ValidationStatus.ERROR) {
return false;
}
let /** @type {?} */ msg = result.message;
}
}
return true;
}
/**
* @param {?} range
* @return {?}
*/
setRange(range) {
this.range = range;
}
/**
* @return {?}
*/
getRange() {
return this.range;
}
/**
* @param {?} isNotOpenSec
* @return {?}
*/
setNotOpenSecShow(isNotOpenSec) {
this.isNotOpenSec = isNotOpenSec;
}
/**
* @return {?}
*/
doHide() {
if (!this.active) {
return;
}
this.active = false;
}
/**
* @return {?}
*/
doShow() {
if (this.active) {
return;
}
this.calculatePopupPosition();
this.calculateTime();
this.active = true;
}
/**
* @param {?} $event
* @return {?}
*/
doBlur($event) {
$(this.elementRef.nativeElement).find('input[type="text"]').blur();
}
/**
* @param {?} hour
* @return {?}
*/
_isCurrentHourTime(hour) {
if (hour === null || hour === undefined) {
return false;
}
return (hour === this.selectedHour);
}
/**
* @param {?} min
* @return {?}
*/
_isCurrentMinTime(min) {
if (min === null || min === undefined) {
return false;
}
return (min === this.selectedMin);
}
/**
* @param {?} sec
* @return {?}
*/
_isCurrentSecTime(sec) {
if (sec === null || sec === undefined) {
return false;
}
return (sec === this.selectedSec);
}
/**
* @return {?}
*/
_isNotOpenSecShow() {
return this.isNotOpenSec;
}
/**
* @param {?} $event
* @param {?} item
* @param {?} type
* @return {?}
*/
onTimeClicked($event, item, type) {
if (item !== null && typeof item !== undefined) {
if (type === HOUR) {
this.updateSelectedTimeLocal(item, this.selectedMin, this.selectedSec);
}
else if (type === MIN) {
this.updateSelectedTimeLocal(this.selectedHour, item, this.selectedSec);
}
else if (type === SEC) {
this.updateSelectedTimeLocal(this.selectedHour, this.selectedMin, item);
}
}
this._isItemClick = true;
this.requestFocus();
}
/**
* @param {?} $event
* @param {?} type
* @return {?}
*/
onUpArrow($event, type) {
if (type === HOUR) {
this.onUpArrowHour($event);
}
else if (type === MIN) {
this.onUpArrowMin($event);
}
else if (type === SEC) {
this.onUpArrowSec($event);
}
this._isItemClick = true;
this.requestFocus();
}
/**
* @param {?} $event
* @param {?} type
* @return {?}
*/
onDownArrow($event, type) {
if (type === HOUR) {
this.onDownArrowHour($event);
}
else if (type === MIN) {
this.onDownArrowMin($event);
}
else if (type === SEC) {
this.onDownArrowSec($event);
}
this._isItemClick = true;
this.requestFocus();
}
/**
* @return {?}
*/
getDataPatternFromSetting() {
if (this.isHideSecond()) {
return DEFAULT_HIDE_SECOND_DATA_PATTERN;
}
else {
return DEFAULT_SHOW_SECOND_DATA_PATTERN;
}
}
/**
* @param {?} $event
* @return {?}
*/
onTextBoxClicked($event) {
if (!this.isActive()) {
this.show($event);
}
}
/**
* @param {?} $event
* @return {?}
*/
onFocusing($event) {
this.needFocusService.setFocusingComponent(this, $event);
}
/**
* @param {?} $event
* @return {?}
*/
onLostFocusing($event) {
if (this._itemLostFocusingTimeout !== null && typeof this._itemLostFocusingTimeout !== 'undefined') {
clearTimeout(this._itemLostFocusingTimeout);
this._itemLostFocusingTimeout = null;
}
this._itemLostFocusingTimeout = setTimeout(() => {
if (!this._isItemClick) {
this.doBlur($event);
if (this.needFocusService.getFocusingComponent() === this) {
this.needFocusService.resetFocusingComponent($event);
}
}
else {
this.requestFocus();
}
this._isItemClick = false;
}, 140); // if dropdown not hide try to adjust this value
}
/**
* @return {?}
*/
getPopupPositionTop() {
return this.positionTop;
}
/**
* @return {?}
*/
getPopupPositionLeft() {
return this.positionLeft;
}
/**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
onValidationEnd(inputValue, results) {
}
/**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
onDataChange(data, inputVal) {
this.updateUI();
}
/**
* @param {?} $event
* @return {?}
*/
doFocus($event) {
if (!this.isReadOnly() && !this.isDisabled()) {
// Only show popup when it is NOT read only and not disabled.
this.requestFocus();
this.show();
}
}
/**
* @param {?} $event
* @return {?}
*/
doLostFocus($event) {
this.hide();
}
/**
* @param {?} $event
* @return {?}
*/
onValueChanged($event) {
// Parse edited text to date (in case of it was changed).
let /** @type {?} */ inputText = null;
try {
inputText = (/** @type {?} */ ($event.target)).value.toString();
}
catch (/** @type {?} */ e) {
}
if (inputText) {
// If textbox is not empty, try to parse text value -> date.
let /** @type {?} */ newDate = null;
try {
if (this.formatter instanceof DateFormatter) {
newDate = this.formatter.parse(inputText);
}
else {
newDate = Date.parse(inputText);
}
}
catch (/** @type {?} */ e) { }
this.updateSelectedDateLocal(newDate);
}
else {
// If textbox is empty, it means that the user does not want
// to input any value.
this.setDate(null);
}
}
/**
* @return {?}
*/
getRangeHour() {
return this.rangeHour;
}
/**
* @return {?}
*/
getRangeMin() {
return this.rangeMin;
}
/**
* @return {?}
*/
getRangeSec() {
return this.rangeSec;
}
/**
* @return {?}
*/
isActive() {
return this.active;
}
/**
* @return {?}
*/
getSelectedDate() {
let /** @type {?} */ selectedDate = this.getDate();
if (selectedDate === null || selectedDate === undefined) {
// If current date value obtained from data is null or undefined,
// we'll return as now() instead.
selectedDate = new Date();
}
return selectedDate;
}
/**
* @return {?}
*/
getWidth() {
return this.width;
}
/**
* @param {?} width
* @return {?}
*/
setWidth(width) {
this.width = width;
}
/**
* @return {?}
*/
getHeight() {
return this.height;
}
/**
* @param {?} height
* @return {?}
*/
setHeight(height) {
this.height = height;
}
/**
* @return {?}
*/
isHideSecond() {
return this.isNotOpenSec;
}
/**
* @param {?} hide
* @return {?}
*/
setHideSecond(hide) {
this.isNotOpenSec = hide;
// Clear seconds from selected date.
if (hide) {
let /** @type {?} */ date = this.getDate();
date.setSeconds(0);
this.setDate(date);
}
// Auto set DateFormatter's data pattern.
if (this.formatter !== null && this.formatter !== undefined && this.formatter instanceof DateFormatter) {
let /** @type {?} */ df = /** @type {?} */ (this.formatter);
if (this._useDataPattern) {
df.setPattern(this.getDataPattern());
}
}
}
/**
* @param {?} a
* @param {?} b
* @return {?}
*/
compareDate(a, b) {
if (!a && b) {
return -1;
}
if (a && !b) {
return 1;
}
if (!a && !b) {
return 0;
}
// Compare with hours first.
let /** @type {?} */ aHr = a.getHours();
let /** @type {?} */ bHr = b.getHours();
if (aHr > bHr) {
return 1;
}
else if (aHr < bHr) {
return -1;
}
// If hours are equal, compare with minutes next.
let /** @type {?} */ aMn = a.getMinutes();
let /** @type {?} */ bMn = b.getMinutes();
if (aMn > bMn) {
return 1;
}
else if (aMn < bMn) {
return -1;
}
// Finally, compare with seconds (if it is enabled).
if (!this.isHideSecond()) {
let /** @type {?} */ aSc = a.getSeconds();
let /** @type {?} */ bSc = b.getSeconds();
if (aSc > bSc) {
return 1;
}
else if (aSc < bSc) {
return -1;
}
}
return 0;
}
}
TimePicker.TYPE_NAME = TYPE_NAME;
TimePicker.DEFAULT_RANGE = DEFAULT_RANGE;
TimePicker.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: `<div class="phx-time-picker">
<div class="time-picker-textbox">
<input type="text" [disabled]="isDisabled()" [readonly]="isReadOnly()" [style.width]="getWidth()" [style.height]="getHeight()" [value]="formattedData"
(focusin)="onFocusing($event)" (click)="onTextBoxClicked($event)"
(blur)="onLostFocusing($event)" (change)="onValueChanged($event)">
</div>
<div class="time-picker-view" [class.show]="isActive()" [style.top]="getPopupPositionTop() ? getPopupPositionTop() + 'px' : undefined" [style.left]="getPopupPositionLeft() ? getPopupPositionLeft() + 'px' : undefined">
<div class="time-view">
<div class="icon-arrow-up" (click)="onUpArrow($event, HOUR)"></div>
<div *ngFor="let hour of getRangeHour(); let i = index;" class="time-number" [class.selected]="_isCurrentHourTime(hour)" (click)="onTimeClicked($event, hour, HOUR)">
{{hour | number:'2.0-0'}}
</div>
<div class="icon-arrow-down" (click)="onDownArrow($event, HOUR)"></div>
</div>
<div class="time-view">
<div class="icon-arrow-up" (click)="onUpArrow($event, MIN)"></div>
<div *ngFor="let min of getRangeMin(); let i = index;" class="time-number" [class.selected]="_isCurrentMinTime(min)" (click)="onTimeClicked($event, min, MIN)">
{{min | number:'2.0-0'}}
</div>
<div class="icon-arrow-down" (click)="onDownArrow($event, MIN)"></div>
</div>
<div class="time-view" [class.not-open-sec]="_isNotOpenSecShow()">
<div class="icon-arrow-up" (click)="onUpArrow($event, SEC)"></div>
<div *ngFor="let sec of getRangeSec(); let i = index;" class="time-number" [class.selected]="_isCurrentSecTime(sec)" (click)="onTimeClicked($event, sec, SEC)">
{{sec | number:'2.0-0'}}
</div>
<div class="icon-arrow-down" (click)="onDownArrow($event, SEC)"></div>
</div>
</div>
</div>
`
},] },
];
/** @nocollapse */
TimePicker.ctorParameters = () => [
{ type: ElementRef, },
{ type: NeedFocusService, },
{ type: FormatterFactory, },
{ type: PhloxAppInfoService, },
];
TimePicker.propDecorators = {
"dataParent": [{ type: Input },],
"ignoreParentData": [{ type: Input },],
"data": [{ type: Input },],
"ignoreParentDisabled": [{ type: Input },],
"delegateHistory": [{ type: Input },],
"onDisabled": [{ type: Input },],
"onEnabled": [{ type: Input },],
"loadingEnabled": [{ type: Input },],
"i18nKey": [{ type: Input },],
"bypass": [{ type: Input, args: ['i18nBypass',] },],
"options": [{ type: Input },],
"disabled": [{ type: Input },],
"field": [{ type: Input },],
"name": [{ type: Input },],
"typeOfData": [{ type: Input },],
"readOnly": [{ type: Input },],
"help": [{ type: Input },],
"formatter": [{ type: Input, args: ['formatter',] },],
"formatterName": [{ type: Input, args: ['formatterName',] },],
"formatterOptions": [{ type: Input, args: ['formatterOptions',] },],
"formatterUsePropertyValue": [{ type: Input, args: ['formatterUsePropertyValue',] },],
"dataPattern": [{ type: Input },],
"range": [{ type: Input },],
"width": [{ type: Input },],
"height": [{ type: Input },],
"hideSecond": [{ type: Input, args: ['hideSecond',] },],
"loadEvent": [{ type: Output, args: ['phxLoad',] },],
"startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },],
"endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },],
"beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },],
"focusEvent": [{ type: Output, args: ['phxFocus',] },],
"beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },],
"lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },],
"beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },],
"changeEvent": [{ type: Output, args: ['phxChange',] },],
"beforeViewShowEvent": [{ type: Output, args: ['phxBeforeViewShow',] },],
"viewShowEvent": [{ type: Output, args: ['phxViewShow',] },],
"beforeViewHideEvent": [{ type: Output, args: ['phxBeforeViewHide',] },],
"viewHideEvent": [{ type: Output, args: ['phxViewHide',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], TimePicker.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TimePicker.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], TimePicker.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TimePicker.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TimePicker.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], TimePicker.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], TimePicker.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TimePicker.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TimePicker.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], TimePicker.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TimePicker.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TimePicker.prototype, "field", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TimePicker.prototype, "name", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TimePicker.prototype, "typeOfData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TimePicker.prototype, "readOnly", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], TimePicker.prototype, "help", void 0);
tslib_1.__decorate([
Option('formatter.instance'),
tslib_1.__metadata("design:type", Object)
], TimePicker.prototype, "formatter", void 0);
tslib_1.__decorate([
Option('formatter.name'),
tslib_1.__metadata("design:type", String)
], TimePicker.prototype, "formatterName", void 0);
tslib_1.__decorate([
Option('formatter.options'),
tslib_1.__metadata("design:type", Object)
], TimePicker.prototype, "formatterOptions", void 0);
tslib_1.__decorate([
Option('formatter.usePropertyValue'),
tslib_1.__metadata("design:type", Boolean)
], TimePicker.prototype, "formatterUsePropertyValue", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TimePicker.prototype, "dataPattern", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], TimePicker.prototype, "range", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TimePicker.prototype, "width", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TimePicker.prototype, "height", void 0);
tslib_1.__decorate([
Option('hideSecond'),
tslib_1.__metadata("design:type", Boolean),
tslib_1.__metadata("design:paramtypes", [Boolean])
], TimePicker.prototype, "hideSecond", null);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('startValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "startValidateEvent", void 0);
tslib_1.__decorate([
Option('endValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "endValidateEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "lostFocusEvent", void 0);
tslib_1.__decorate([
Option('beforeChange'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "beforeChangeEvent", void 0);
tslib_1.__decorate([
Option('change'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "changeEvent", void 0);
tslib_1.__decorate([
Option('beforeViewShow'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "beforeViewShowEvent", void 0);
tslib_1.__decorate([
Option('viewShow'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "viewShowEvent", void 0);
tslib_1.__decorate([
Option('beforeViewHide'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "beforeViewHideEvent", void 0);
tslib_1.__decorate([
Option('viewHide'),
tslib_1.__metadata("design:type", EventEmitter)
], TimePicker.prototype, "viewHideEvent", void 0);
function TimePicker_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
TimePicker.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
TimePicker.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
TimePicker.propDecorators;
/** @type {?} */
TimePicker.TYPE_NAME;
/** @type {?} */
TimePicker.DEFAULT_RANGE;
/** @type {?} */
TimePicker.prototype.HOUR;
/** @type {?} */
TimePicker.prototype.MIN;
/** @type {?} */
TimePicker.prototype.SEC;
/** @type {?} */
TimePicker.prototype.dataParent;
/** @type {?} */
TimePicker.prototype.ignoreParentData;
/** @type {?} */
TimePicker.prototype.data;
/** @type {?} */
TimePicker.prototype.ignoreParentDisabled;
/** @type {?} */
TimePicker.prototype.delegateHistory;
/** @type {?} */
TimePicker.prototype.onDisabled;
/** @type {?} */
TimePicker.prototype.onEnabled;
/** @type {?} */
TimePicker.prototype.loadingEnabled;
/** @type {?} */
TimePicker.prototype.i18nKey;
/** @type {?} */
TimePicker.prototype.bypass;
/** @type {?} */
TimePicker.prototype.options;
/** @type {?} */
TimePicker.prototype.disabled;
/** @type {?} */
TimePicker.prototype.field;
/** @type {?} */
TimePicker.prototype.name;
/** @type {?} */
TimePicker.prototype.typeOfData;
/** @type {?} */
TimePicker.prototype.readOnly;
/** @type {?} */
TimePicker.prototype.help;
/** @type {?} */
TimePicker.prototype.formatter;
/** @type {?} */
TimePicker.prototype.formatterName;
/** @type {?} */
TimePicker.prototype.formatterOptions;
/** @type {?} */
TimePicker.prototype.formatterUsePropertyValue;
/** @type {?} */
TimePicker.prototype.dataPattern;
/** @type {?} */
TimePicker.prototype.range;
/** @type {?} */
TimePicker.prototype.width;
/** @type {?} */
TimePicker.prototype.height;
/** @type {?} */
TimePicker.prototype.loadEvent;
/** @type {?} */
TimePicker.prototype.startValidateEvent;
/** @type {?} */
TimePicker.prototype.endValidateEvent;
/** @type {?} */
TimePicker.prototype.beforeFocusEvent;
/** @type {?} */
TimePicker.prototype.focusEvent;
/** @type {?} */
TimePicker.prototype.beforeLostFocusEvent;
/** @type {?} */
TimePicker.prototype.lostFocusEvent;
/** @type {?} */
TimePicker.prototype.beforeChangeEvent;
/** @type {?} */
TimePicker.prototype.changeEvent;
/** @type {?} */
TimePicker.prototype.beforeViewShowEvent;
/** @type {?} */
TimePicker.prototype.viewShowEvent;
/** @type {?} */
TimePicker.prototype.beforeViewHideEvent;
/** @type {?} */
TimePicker.prototype.viewHideEvent;
/** @type {?} */
TimePicker.prototype.elementFocused;
/** @type {?} */
TimePicker.prototype.needFocusService;
/** @type {?} */
TimePicker.prototype.rangeHour;
/** @type {?} */
TimePicker.prototype.rangeMin;
/** @type {?} */
TimePicker.prototype.rangeSec;
/** @type {?} */
TimePicker.prototype.selectedHour;
/** @type {?} */
TimePicker.prototype.selectedMin;
/** @type {?} */
TimePicker.prototype.selectedSec;
/** @type {?} */
TimePicker.prototype.positionTop;
/** @type {?} */
TimePicker.prototype.positionLeft;
/** @type {?} */
TimePicker.prototype.active;
/** @type {?} */
TimePicker.prototype.isNotOpenSec;
/** @type {?} */
TimePicker.prototype._isItemClick;
/** @type {?} */
TimePicker.prototype._itemLostFocusingTimeout;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGltZVBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZGF0YXZpZXcvaW5wdXQvVGltZVBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUduRix1QkFBTSxTQUFTLEdBQVcsaUJBQWlCLENBQUM7QUFFNUMsdUJBQU0sYUFBYSxHQUFXLENBQUMsQ0FBQztBQUVoQyx1QkFBTSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBQzdCLHVCQUFNLGVBQWUsR0FBVyxDQUFDLENBQUM7QUFDbEMsdUJBQU0sSUFBSSxHQUFXLE1BQU0sQ0FBQztBQUM1Qix1QkFBTSxHQUFHLEdBQVcsS0FBSyxDQUFDO0FBQzFCLHVCQUFNLEdBQUcsR0FBVyxLQUFLLENBQUM7QUFFMUIsdUJBQU0sZ0NBQWdDLEdBQVcsVUFBVSxDQUFDO0FBQzVELHVCQUFNLGdDQUFnQyxHQUFXLE9BQU8sQ0FB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