ngx-mat-lib
Version:
A bunch of utilities and components to use in your Angular 7+ apps!
473 lines (472 loc) • 60.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { coerceBooleanProperty } from "@angular/cdk/coercion";
import { FocusMonitor } from "@angular/cdk/a11y";
import { FormBuilder, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, ControlContainer } from "@angular/forms";
import { Component, ElementRef, forwardRef, Input, Host, SkipSelf, Optional, ViewEncapsulation, } from "@angular/core";
import { MatFormFieldControl } from "@angular/material";
import { Subject } from "rxjs";
import { XmatTime } from "../../models";
import { xmatTimeInputValidation } from "../../validators/xmat-time-input.validator";
/** @type {?} */
const controlType = "xmat-time";
/** @type {?} */
const elementType = "input";
/** @type {?} */
const hoursPattern = new RegExp("^([01][0-9]|2[0-3])");
/** @type {?} */
const minutesPattern = new RegExp("^([0-5][0-9])$");
/** @type {?} */
const isParentControlRequired = function (control) {
if (control.validator !== null) {
/** @type {?} */
const validator = control.validator(/** @type {?} */ ({}));
return validator && validator["required"];
}
return false;
};
const ɵ0 = isParentControlRequired;
export class XmatMatTimeComponent {
/**
* @param {?} _elRef
* @param {?} _controlContainer
* @param {?} _focusMonitor
* @param {?} formBuilder
*/
constructor(_elRef, _controlContainer, _focusMonitor, formBuilder) {
this._elRef = _elRef;
this._controlContainer = _controlContainer;
this._focusMonitor = _focusMonitor;
this.controlType = controlType;
this.describedBy = "";
this.errorState = false;
this.focused = false;
this.id = `${controlType}-${XmatMatTimeComponent.nextId++}`;
this.invalid = false;
this.model = new XmatTime();
this.ngControl = null;
this.placeholderM = "";
this.placeholderH = "";
this.stateChanges = new Subject();
this._deniedChars = /[^0-9]+/;
this._required = false;
this._disabled = false;
this._validators = {
hours: [Validators.minLength(2), Validators.maxLength(2), Validators.pattern(hoursPattern)],
minutes: [Validators.minLength(2), Validators.maxLength(2), Validators.pattern(minutesPattern)],
};
this.parts = formBuilder.group({
"hours": ["", Validators.pattern(hoursPattern)],
"minutes": ["", Validators.pattern(minutesPattern)],
}, { validator: xmatTimeInputValidation });
_focusMonitor.monitor(_elRef.nativeElement, true).subscribe(origin => {
this.focused = !!origin;
this.stateChanges.next();
});
}
/**
* @return {?}
*/
get empty() {
/** @type {?} */
const value = this.parts.value;
return !value.hours && !value.minutes;
}
/**
* @return {?}
*/
get shouldLabelFloat() {
return this.focused || !this.empty;
}
/**
* @return {?}
*/
get isFilled() {
/** @type {?} */
const value = this.parts.value;
return value.hours.length + value.minutes.length === 4;
}
/**
* @return {?}
*/
get placeholder() {
return this.inputPlaceholder;
}
/**
* @param {?} value
* @return {?}
*/
set placeholder(value) {
/** @type {?} */
const splitPlaceholder = value.split(":");
this.inputPlaceholder = value;
this.placeholderH = splitPlaceholder[0] || "";
this.placeholderM = splitPlaceholder[1] || "";
this.stateChanges.next();
}
/**
* @return {?}
*/
get required() {
return this._required;
}
/**
* @param {?} req
* @return {?}
*/
set required(req) {
/** @type {?} */
const newVal = coerceBooleanProperty(req);
if (newVal !== this._required) {
this._required = newVal;
this._updateValidators();
// Emit stateChange to update value in mat-groupCtrl-field
this.stateChanges.next();
}
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} dis
* @return {?}
*/
set disabled(dis) {
/** @type {?} */
const newVal = coerceBooleanProperty(dis);
if (newVal !== this._disabled) {
this._disabled = newVal;
this._disabled ? this.parts.disable() : this.parts.enable();
this._updateValidators();
// Emit stateChange to update value in mat-groupCtrl-field
this.stateChanges.next();
}
}
/**
* @return {?}
*/
get value() {
/** @type {?} */
const newValue = this.parts.value;
if (newValue.hours.length === 2 && newValue.minutes.length === 2) {
return new XmatTime(newValue.hours, newValue.minutes);
}
return null;
}
/**
* @param {?} time
* @return {?}
*/
set value(time) {
time = time || new XmatTime("", "");
this.parts.setValue({ hours: time.hours, minutes: time.minutes });
this.stateChanges.next();
}
/**
* @param {?} _e_
* @return {?}
*/
inputChange(_e_) {
this._handlePropagation();
}
/**
* @return {?}
*/
ngDoCheck() {
if (!!this._extCtrl && !this._extCtrl.disabled) {
/** @type {?} */
const parentCtrlRequired = isParentControlRequired(/** @type {?} */ (Object.assign({}, this._extCtrl)));
if (this._required !== parentCtrlRequired) {
this.required = parentCtrlRequired;
}
// console.info("DO CHECK", this.ngControl);
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.stateChanges.complete();
this._focusMonitor.stopMonitoring(this._elRef.nativeElement);
}
/**
* @return {?}
*/
ngOnInit() {
if (!!this.formControlName && this._controlContainer) {
this._extCtrl = /** @type {?} */ (this._controlContainer.control.get(this.formControlName));
this.required = isParentControlRequired(/** @type {?} */ (Object.assign({}, this._extCtrl)));
}
}
/**
* @param {?} event
* @return {?}
*/
onContainerClick(event) {
if ((/** @type {?} */ (event.target)).tagName.toLowerCase() !== elementType) {
this._elRef.nativeElement.querySelector(elementType).focus();
}
}
/**
* @param {?} ids
* @return {?}
*/
setDescribedByIds(ids) {
this.describedBy = ids.join(" ");
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this._propagateChange = fn;
}
/**
* @return {?}
*/
registerOnTouched() {
}
/**
* @param {?} isDisabled
* @return {?}
*/
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
/**
* @return {?}
*/
setTouched() {
this.parts.markAsTouched();
this.validate(this.parts);
// Updates errorState to show mat-error
// this.errorState = this.parts.invalid;
// Emit stateChange to update value in mat-groupCtrl-field
this.stateChanges.next();
}
/**
* @param {?} event
* @param {?=} _ishours_
* @return {?}
*/
typingValidation(event, _ishours_ = false) {
/** @type {?} */
let keyCode;
/** @type {?} */
let inputChar;
if (event.key === void 0) {
keyCode = event.keyCode || event.charCode;
inputChar = String.fromCharCode(keyCode);
}
else {
inputChar = event.key;
if (inputChar.indexOf("Arrow") > -1) {
return true;
}
switch (inputChar) {
case "Delete":
case "Backspace":
case "Enter":
case "Tab":
case "Left":
case "Right":
case "F5":
return true;
case "Insert": // Shift + INS
// Shift + INS
if (event.shiftKey) {
return true;
}
break;
case "X": // Ctrl + X / Cmd + x
case "x":
case "C": // Ctrl + C / Cmd + c
case "c":
case "V": // Ctrl + V / Cmd + V
case "v": // Ctrl + v / Cmd + v
// Ctrl + v / Cmd + v
if (event.ctrlKey || event.metaKey) {
return true;
}
break;
}
}
if (String(inputChar).match(this._deniedChars)) {
event.preventDefault();
return false;
}
// TODO: HANDLE THE COOL WAY
/*if (isHours && this.parts.value.hours.length === 2) {
this._elRef.nativeElement.querySelectorAll(elementType)[1].focus();
}*/
}
/**
* @param {?} _c_
* @return {?}
*/
validate(_c_) {
/** @type {?} */
const value = this.parts.value;
/** @type {?} */
const charsCount = value.hours.length + value.minutes.length;
/** @type {?} */
const addFormatError = this.parts.invalid && (charsCount > 0 && charsCount < 4);
this.errorState = addFormatError || this._extCtrl && !this._extCtrl.pristine && this._extCtrl.invalid;
return addFormatError ? { timeFormatError: true } : null;
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
this.parts.reset();
/** @type {?} */
let newValue = /** @type {?} */ ({ hours: "", minutes: "" });
if (!!value && value instanceof XmatTime) {
newValue = value;
}
this.parts.setValue(newValue);
this._handlePropagation();
}
/**
* @return {?}
*/
_handlePropagation() {
/** @type {?} */
let toPropagate = void 0;
if (this.parts.valid) {
/** @type {?} */
const value = this.parts.value;
if (!value.hours && !value.minutes) {
toPropagate = void 0;
}
else {
toPropagate = new XmatTime(value.hours, value.minutes);
}
}
this._propagateChange(toPropagate);
// Emit stateChange to update value in mat-groupCtrl-field
this.stateChanges.next();
}
/**
* @param {?} _e_
* @return {?}
*/
_propagateChange(_e_) {
}
/**
* @return {?}
*/
_updateValidators() {
/** @type {?} */
const hoursCtrl = this.parts.get("hours");
/** @type {?} */
const minsCtrl = this.parts.get("minutes");
if (this._disabled) {
hoursCtrl.setValidators([]);
minsCtrl.setValidators([]);
this.errorState = !1;
}
else {
if (this._required) {
hoursCtrl.setValidators([Validators.required].concat(this._validators.hours));
minsCtrl.setValidators([Validators.required].concat(this._validators.minutes));
}
else {
hoursCtrl.setValidators(this._validators.hours);
minsCtrl.setValidators(this._validators.minutes);
}
}
this._handlePropagation();
}
}
XmatMatTimeComponent.nextId = 0;
XmatMatTimeComponent.decorators = [
{ type: Component, args: [{
selector: controlType,
template: "<div [ngClass]=\"{'xmat-time-invalid': invalid, 'xmat-time-focused' : focused, 'xmat-time-empty': empty}\"\n class=\"xmat-time-wrap\"\n [formGroup]=\"parts\">\n <input class=\"hours\"\n formControlName=\"hours\"\n (focus)=\"setTouched()\"\n (keydown)=\"typingValidation($event, true)\"\n (input)=\"inputChange($event)\"\n (blur)=\"inputChange($event)\"\n [placeholder]=\"placeholderH\"\n maxlength=\"2\"\n size=\"2\">\n <span class=\"xmat-time-colon\">:</span>\n <input class=\"minutes\"\n formControlName=\"minutes\"\n (focus)=\"setTouched()\"\n (keydown)=\"typingValidation($event)\"\n (input)=\"inputChange($event)\"\n (blur)=\"inputChange($event)\"\n [placeholder]=\"placeholderM\"\n maxlength=\"2\"\n size=\"2\">\n <span class=\"xmat-time-required xmat-fade\"\n [ngClass]=\"{'xmat-fade-in': !shouldLabelFloat}\"\n *ngIf=\"required && !disabled\">*</span>\n</div>\n",
providers: [
{ provide: MatFormFieldControl, useExisting: XmatMatTimeComponent },
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => XmatMatTimeComponent), multi: true },
{ provide: NG_VALIDATORS, useExisting: forwardRef(() => XmatMatTimeComponent), multi: true }
],
host: {
"[class.xmat-mat-time]": "true",
"[class.floating]": "shouldLabelFloat",
"[class.filled]": "isFilled",
"[id]": "id",
"[attr.aria-describedby]": "describedBy",
},
encapsulation: ViewEncapsulation.None,
styles: ["@-webkit-keyframes cdk-text-field-autofill-start{/*!*/}@-webkit-keyframes cdk-text-field-autofill-end{/*!*/}.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-badge-small .mat-badge-content{font-size:6px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 12px}.mat-body-2,.mat-body-strong{font:500 14px/24px Roboto,\"Helvetica Neue\",sans-serif}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-caption,.mat-small{font:400 12px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 56px;letter-spacing:-.05em}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px;letter-spacing:-.02em}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px;letter-spacing:-.005em}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-button,.mat-fab,.mat-flat-button,.mat-icon-button,.mat-mini-fab,.mat-raised-button,.mat-stroked-button{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-content,.mat-card-subtitle{font-size:14px}.mat-checkbox{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-remove.mat-icon,.mat-chip .mat-chip-trailing-icon.mat-icon{font-size:18px}.mat-table{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif}.mat-expansion-panel-header{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.34375em) scale(.75);transform:translateY(-1.34375em) scale(.75);width:133.33333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.34374em) scale(.75);transform:translateY(-1.34374em) scale(.75);width:133.33334%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.66667em;top:calc(100% - 1.79167em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.33334%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.33335%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.54167em;top:calc(100% - 1.66667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.28122em) scale(.75);transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28121em) scale(.75);transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.2812em) scale(.75);transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-.59375em) scale(.75);transform:translateY(-.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-.59374em) scale(.75);transform:translateY(-.59374em) scale(.75);width:133.33334%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.59375em) scale(.75);transform:translateY(-1.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.59374em) scale(.75);transform:translateY(-1.59374em) scale(.75);width:133.33334%}.mat-grid-tile-footer,.mat-grid-tile-header{font-size:14px}.mat-grid-tile-footer .mat-line,.mat-grid-tile-header .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-footer .mat-line:nth-child(n+2),.mat-grid-tile-header .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-slider-thumb-label-text{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px;font-weight:500}.mat-stepper-horizontal,.mat-stepper-vertical{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:400}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0}.mat-tooltip{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item,.mat-list-option{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,\"Helvetica Neue\",sans-serif}.mat-simple-snackbar{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-nested-tree-node,.mat-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;-webkit-transition:opacity,-webkit-transform cubic-bezier(0,0,.2,1);transition:opacity,transform cubic-bezier(0,0,.2,1),-webkit-transform cubic-bezier(0,0,.2,1);-webkit-transform:scale(0);transform:scale(0)}@media (-ms-high-contrast:active){.mat-ripple-element{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-global-overlay-wrapper,.cdk-overlay-container{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:-webkit-box;display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:-webkit-box;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;-webkit-transition:opacity .4s cubic-bezier(.25,.8,.25,1);transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}@media screen and (-ms-high-contrast:active){.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{-webkit-animation-name:cdk-text-field-autofill-start;animation-name:cdk-text-field-autofill-start}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){-webkit-animation-name:cdk-text-field-autofill-end;animation-name:cdk-text-field-autofill-end}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{height:auto!important;overflow:hidden!important;padding:2px 0!important;box-sizing:content-box!important}xmat-input{display:inline-block}mat-form-field span.mat-form-field-label-wrapper label,mat-form-field span.xmat-time-colon{-webkit-transition:color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1),opacity .2s cubic-bezier(.25,.8,.25,1),-webkit-transform .4s cubic-bezier(.25,.8,.25,1);transition:transform .4s cubic-bezier(.25,.8,.25,1),color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1),opacity .2s cubic-bezier(.25,.8,.25,1),-webkit-transform .4s cubic-bezier(.25,.8,.25,1)}mat-form-field[floatLabel=never] .xmat-time-empty span.xmat-time-colon{opacity:0;cursor:default}mat-form-field.mat-form-field-hide-placeholder:not([floatLabel]) xmat-time.empty-placeholder:not(.floating) span.xmat-time-colon,mat-form-field.mat-form-field-hide-placeholder:not([floatLabel]) xmat-time:not(.floating):not(.empty-placeholder)+span.mat-form-field-label-wrapper label,mat-form-field.mat-form-field-hide-placeholder[floatLabel=auto] xmat-time.empty-placeholder:not(.floating) span.xmat-time-colon,mat-form-field.mat-form-field-hide-placeholder[floatLabel=auto] xmat-time:not(.floating):not(.empty-placeholder)+span.mat-form-field-label-wrapper label{opacity:0}div.xmat-time-wrap div{display:-webkit-box;display:flex}div.xmat-time-wrap input{border:none;background:0 0;padding:0;outline:0;font:inherit;text-align:center}div.xmat-time-wrap.xmat-time-invalid span.xmat-time-colon,div.xmat-time-wrap.xmat-time-invalid span.xmat-time-required{color:#d32f2f}div.xmat-time-wrap.xmat-time-invalid ::-webkit-input-placeholder{opacity:1;color:#d32f2f}div.xmat-time-wrap.xmat-time-invalid ::-moz-placeholder{opacity:1;color:#d32f2f}div.xmat-time-wrap.xmat-time-invalid :-ms-input-placeholder{opacity:1;color:#d32f2f}div.xmat-time-wrap.xmat-time-invalid ::-ms-input-placeholder{opacity:1;color:#d32f2f}div.xmat-time-wrap.xmat-time-invalid ::placeholder{opacity:1;color:#d32f2f}"]
}] }
];
/** @nocollapse */
XmatMatTimeComponent.ctorParameters = () => [
{ type: ElementRef },
{ type: ControlContainer, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf }] },
{ type: FocusMonitor },
{ type: FormBuilder }
];
XmatMatTimeComponent.propDecorators = {
placeholder: [{ type: Input }],
required: [{ type: Input }],
disabled: [{ type: Input }],
value: [{ type: Input }],
formControlName: [{ type: Input }]
};
if (false) {
/** @type {?} */
XmatMatTimeComponent.nextId;
/** @type {?} */
XmatMatTimeComponent.prototype.formControlName;
/** @type {?} */
XmatMatTimeComponent.prototype.controlType;
/** @type {?} */
XmatMatTimeComponent.prototype.describedBy;
/** @type {?} */
XmatMatTimeComponent.prototype.errorState;
/** @type {?} */
XmatMatTimeComponent.prototype.focused;
/** @type {?} */
XmatMatTimeComponent.prototype.id;
/** @type {?} */
XmatMatTimeComponent.prototype.inputPlaceholder;
/** @type {?} */
XmatMatTimeComponent.prototype.invalid;
/** @type {?} */
XmatMatTimeComponent.prototype.model;
/** @type {?} */
XmatMatTimeComponent.prototype.ngControl;
/** @type {?} */
XmatMatTimeComponent.prototype.parts;
/** @type {?} */
XmatMatTimeComponent.prototype.placeholderM;
/** @type {?} */
XmatMatTimeComponent.prototype.placeholderH;
/** @type {?} */
XmatMatTimeComponent.prototype.stateChanges;
/** @type {?} */
XmatMatTimeComponent.prototype._deniedChars;
/** @type {?} */
XmatMatTimeComponent.prototype._extCtrl;
/** @type {?} */
XmatMatTimeComponent.prototype._required;
/** @type {?} */
XmatMatTimeComponent.prototype._disabled;
/** @type {?} */
XmatMatTimeComponent.prototype._validators;
/** @type {?} */
XmatMatTimeComponent.prototype._elRef;
/** @type {?} */
XmatMatTimeComponent.prototype._controlContainer;
/** @type {?} */
XmatMatTimeComponent.prototype._focusMonitor;
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1hdC10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYXQtbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMveG1hdC10aW1lLWlucHV0L3htYXQtdGltZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBRUgsV0FBVyxFQUlYLGFBQWEsRUFDYixpQkFBaUIsRUFFakIsVUFBVSxFQUNWLGdCQUFnQixFQUNuQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFHVixLQUFLLEVBQ0wsSUFBSSxFQUNKLFFBQVEsRUFDUixRQUFRLEVBRVIsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFFckYsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDOztBQUNoQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUM7O0FBRTVCLE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7O0FBQ3ZELE1BQU0sY0FBYyxHQUFHLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7O0FBRXBELE1BQU0sdUJBQXVCLEdBQUcsVUFBVSxPQUFvQjtJQUMxRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFOztRQUM1QixNQUFNLFNBQVMs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Qzs7OztZQS9DRyxVQUFVO1lBSlYsZ0JBQWdCLHVCQThKWCxRQUFRLFlBQUksSUFBSSxZQUFJLFFBQVE7WUF6SzVCLFlBQVk7WUFHakIsV0FBVzs7OzBCQStFVixLQUFLO3VCQWFMLEtBQUs7dUJBZUwsS0FBSztvQkFnQkwsS0FBSzs4QkFlTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xuaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9hMTF5XCI7XG5pbXBvcnQge1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1CdWlsZGVyLFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1Hcm91cCxcbiAgICBOZ0NvbnRyb2wsXG4gICAgTkdfVkFMSURBVE9SUyxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICBWYWxpZGF0aW9uRXJyb3JzLFxuICAgIFZhbGlkYXRvcnMsXG4gICAgQ29udHJvbENvbnRhaW5lclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgZm9yd2FyZFJlZixcbiAgICBPbkluaXQsXG4gICAgRG9DaGVjayxcbiAgICBJbnB1dCxcbiAgICBIb3N0LFxuICAgIFNraXBTZWxmLFxuICAgIE9wdGlvbmFsLFxuICAgIE9uRGVzdHJveSxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgWG1hdFRpbWUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyB4bWF0VGltZUlucHV0VmFsaWRhdGlvbiB9IGZyb20gXCIuLi8uLi92YWxpZGF0b3JzL3htYXQtdGltZS1pbnB1dC52YWxpZGF0b3JcIjtcblxuY29uc3QgY29udHJvbFR5cGUgPSBcInhtYXQtdGltZVwiO1xuY29uc3QgZWxlbWVudFR5cGUgPSBcImlucHV0XCI7XG5cbmNvbnN0IGhvdXJzUGF0dGVybiA9IG5ldyBSZWdFeHAoXCJeKFswMV1bMC05XXwyWzAtM10pXCIpO1xuY29uc3QgbWludXRlc1BhdHRlcm4gPSBuZXcgUmVnRXhwKFwiXihbMC01XVswLTldKSRcIik7XG5cbmNvbnN0IGlzUGFyZW50Q29udHJvbFJlcXVpcmVkID0gZnVuY3Rpb24gKGNvbnRyb2w6IEZvcm1Db250cm9sKSB7XG4gICAgaWYgKGNvbnRyb2wudmFsaWRhdG9yICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IGNvbnRyb2wudmFsaWRhdG9yKHt9IGFzIEZvcm1Db250cm9sKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRvciAmJiB2YWxpZGF0b3IucmVxdWlyZWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBjb250cm9sVHlwZSxcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3htYXQtdGltZS5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi94bWF0LXRpbWUuY29tcG9uZW50LnNjc3NcIl0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IFhtYXRNYXRUaW1lQ29tcG9uZW50IH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFhtYXRNYXRUaW1lQ29tcG9uZW50KSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBYbWF0TWF0VGltZUNvbXBvbmVudCksIG11bHRpOiB0cnVlIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgXCJbY2xhc3MueG1hdC1tYXQtdGltZV1cIjogXCJ0cnVlXCIsXG4gICAgICAgIFwiW2NsYXNzLmZsb2F0aW5nXVwiOiBcInNob3VsZExhYmVsRmxvYXRcIixcbiAgICAgICAgXCJbY2xhc3MuZmlsbGVkXVwiOiBcImlzRmlsbGVkXCIsXG4gICAgICAgIFwiW2lkXVwiOiBcImlkXCIsXG4gICAgICAgIFwiW2F0dHIuYXJpYS1kZXNjcmliZWRieV1cIjogXCJkZXNjcmliZWRCeVwiLFxuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcblxuZXhwb3J0IGNsYXNzIFhtYXRNYXRUaW1lQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE1hdEZvcm1GaWVsZENvbnRyb2w8WG1hdFRpbWU+LCBPbkluaXQsIERvQ2hlY2ssIE9uRGVzdHJveSB7XG5cbiAgICBzdGF0aWMgbmV4dElkOiBudW1iZXIgPSAwO1xuXG4gICAgZ2V0IGVtcHR5KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFydHMudmFsdWU7XG4gICAgICAgIHJldHVybiAhdmFsdWUuaG91cnMgJiYgIXZhbHVlLm1pbnV0ZXM7XG4gICAgfVxuXG4gICAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XG4gICAgfVxuXG4gICAgZ2V0IGlzRmlsbGVkKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFydHMudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZS5ob3Vycy5sZW5ndGggKyB2YWx1ZS5taW51dGVzLmxlbmd0aCA9PT0gNDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRQbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRQbGFjZWhvbGRlciA9IHZhbHVlLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgdGhpcy5pbnB1dFBsYWNlaG9sZGVyID0gdmFsdWU7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXJIID0gc3BsaXRQbGFjZWhvbGRlclswXSB8fCBcIlwiO1xuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyTSA9IHNwbGl0UGxhY2Vob2xkZXJbMV0gfHwgXCJcIjtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHJlcXVpcmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgc2V0IHJlcXVpcmVkKHJlcSkge1xuICAgICAgICBjb25zdCBuZXdWYWwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcbiAgICAgICAgaWYgKG5ld1ZhbCAhPT0gdGhpcy5fcmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVpcmVkID0gbmV3VmFsO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgLy8gRW1pdCBzdGF0ZUNoYW5nZSB0byB1cGRhdGUgdmFsdWUgaW4gbWF0LWdyb3VwQ3RybC1maWVsZFxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQoZGlzKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShkaXMpO1xuICAgICAgICBpZiAobmV3VmFsICE9PSB0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBuZXdWYWw7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA/IHRoaXMucGFydHMuZGlzYWJsZSgpIDogdGhpcy5wYXJ0cy5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgIC8vIEVtaXQgc3RhdGVDaGFuZ2UgdG8gdXBkYXRlIHZhbHVlIGluIG1hdC1ncm91cEN0cmwtZmllbGRcbiAgIC