{"version":3,"file":"ng2-date-picker.umd.js","sources":["../../node_modules/tslib/tslib.es6.js","ng://ng2-date-picker/common/types/calendar-mode-enum.ts","ng://ng2-date-picker/common/types/calendar-value-enum.ts","ng://ng2-date-picker/common/types/selection-evet.enum..ts","ng://ng2-date-picker/common/services/dom-appender/dom-appender.service.ts","ng://ng2-date-picker/common/services/utils/utils.service.ts","ng://ng2-date-picker/day-calendar/day-calendar.service.ts","ng://ng2-date-picker/day-calendar/day-calendar.component.ts","ng://ng2-date-picker/time-select/time-select.service.ts","ng://ng2-date-picker/day-time-calendar/day-time-calendar.service.ts","ng://ng2-date-picker/time-select/time-select.component.ts","ng://ng2-date-picker/date-picker/date-picker.service.ts","ng://ng2-date-picker/month-calendar/month-calendar.service.ts","ng://ng2-date-picker/month-calendar/month-calendar.component.ts","ng://ng2-date-picker/day-time-calendar/day-time-calendar.component.ts","ng://ng2-date-picker/date-picker/date-picker.component.ts","ng://ng2-date-picker/date-picker/date-picker-directive.service.ts","ng://ng2-date-picker/date-picker/date-picker.directive.ts","ng://ng2-date-picker/calendar-nav/calendar-nav.component.ts","ng://ng2-date-picker/date-picker.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","export enum ECalendarMode {\n  Day,\n  DayTime,\n  Month,\n  Time\n}\n","export enum ECalendarValue {\n  Moment = 1,\n  MomentArr,\n  String,\n  StringArr\n}\n","export enum SelectEvent {\n  INPUT = 'input',\n  SELECTION = 'selection'\n}\n","import {Injectable} from '@angular/core';\nimport {TDrops, TOpens} from '../../types/poistions.type';\n\n@Injectable()\nexport class DomHelper {\n\n  private static setYAxisPosition(element: HTMLElement, container: HTMLElement, anchor: HTMLElement, drops: TDrops) {\n    const anchorRect = anchor.getBoundingClientRect();\n    const containerRect = container.getBoundingClientRect();\n    const bottom = anchorRect.bottom - containerRect.top;\n    const top = anchorRect.top - containerRect.top;\n\n    if (drops === 'down') {\n      element.style.top = (bottom + 1 + 'px');\n    } else {\n      element.style.top = (top - 1 - element.scrollHeight) + 'px';\n    }\n  }\n\n  private static setXAxisPosition(element: HTMLElement, container: HTMLElement, anchor: HTMLElement, dimElem: HTMLElement, opens: TOpens) {\n    const anchorRect = anchor.getBoundingClientRect();\n    const containerRect = container.getBoundingClientRect();\n    const left = anchorRect.left - containerRect.left;\n\n    if (opens === 'right') {\n      element.style.left = left + 'px';\n    } else {\n      element.style.left = left - dimElem.offsetWidth + anchor.offsetWidth + 'px';\n    }\n  }\n\n  private static isTopInView(el: HTMLElement): boolean {\n    const {top} = el.getBoundingClientRect();\n    return (top >= 0);\n  }\n\n  private static isBottomInView(el: HTMLElement): boolean {\n    const {bottom} = el.getBoundingClientRect();\n    return (bottom <= window.innerHeight);\n  }\n\n  private static isLeftInView(el: HTMLElement): boolean {\n    const {left} = el.getBoundingClientRect();\n    return (left >= 0);\n  }\n\n  private static isRightInView(el: HTMLElement): boolean {\n    const {right} = el.getBoundingClientRect();\n    return (right <= window.innerWidth);\n  }\n\n  appendElementToPosition(config: IAppendToArgs): void {\n    const {container, element} = config;\n\n    if (!container.style.position || container.style.position === 'static') {\n      container.style.position = 'relative';\n    }\n\n    if (element.style.position !== 'absolute') {\n      element.style.position = 'absolute';\n    }\n\n    element.style.visibility = 'hidden';\n\n    setTimeout(() => {\n      this.setElementPosition(config);\n\n      element.style.visibility = 'visible';\n    });\n  }\n\n  setElementPosition({element, container, anchor, dimElem, drops, opens}: IAppendToArgs) {\n    DomHelper.setYAxisPosition(element, container, anchor, 'down');\n    DomHelper.setXAxisPosition(element, container, anchor, dimElem, 'right');\n\n    if (drops !== 'down' && drops !== 'up') {\n      if (DomHelper.isBottomInView(dimElem)) {\n        DomHelper.setYAxisPosition(element, container, anchor, 'down');\n      } else if (DomHelper.isTopInView(dimElem)) {\n        DomHelper.setYAxisPosition(element, container, anchor, 'up');\n      }\n    } else {\n      DomHelper.setYAxisPosition(element, container, anchor, drops);\n    }\n\n    if (opens !== 'left' && opens !== 'right') {\n      if (DomHelper.isRightInView(dimElem)) {\n        DomHelper.setXAxisPosition(element, container, anchor, dimElem, 'right');\n      } else if (DomHelper.isLeftInView(dimElem)) {\n        DomHelper.setXAxisPosition(element, container, anchor, dimElem, 'left');\n      }\n    } else {\n      DomHelper.setXAxisPosition(element, container, anchor, dimElem, opens);\n    }\n  }\n}\n\nexport interface IAppendToArgs {\n  container: HTMLElement;\n  element: HTMLElement;\n  anchor: HTMLElement;\n  dimElem: HTMLElement;\n  drops: TDrops;\n  opens: TOpens;\n}\n","import {ECalendarValue} from '../../types/calendar-value-enum';\nimport {SingleCalendarValue} from '../../types/single-calendar-value';\nimport {Injectable} from '@angular/core';\nimport * as momentNs from 'moment';\nimport {Moment, unitOfTime} from 'moment';\nimport {CalendarValue} from '../../types/calendar-value';\nimport {IDate} from '../../models/date.model';\nimport {CalendarMode} from '../../types/calendar-mode';\nimport {DateValidator} from '../../types/validator.type';\nimport {ICalendarInternal} from '../../models/calendar.model';\n\nconst moment = momentNs;\n\nexport interface DateLimits {\n  minDate?: SingleCalendarValue;\n  maxDate?: SingleCalendarValue;\n  minTime?: SingleCalendarValue;\n  maxTime?: SingleCalendarValue;\n}\n\n@Injectable()\nexport class UtilsService {\n  static debounce(func: Function, wait: number) {\n    let timeout;\n    return function () {\n      const context = this, args = arguments;\n      timeout = clearTimeout(timeout);\n      setTimeout(() => {\n        func.apply(context, args);\n      }, wait);\n    };\n  };\n\n  createArray(size: number): number[] {\n    return new Array(size).fill(1);\n  }\n\n  convertToMoment(date: SingleCalendarValue, format: string): Moment {\n    if (!date) {\n      return null;\n    } else if (typeof date === 'string') {\n      return moment(date, format);\n    } else {\n      return date.clone();\n    }\n  }\n\n  isDateValid(date: string, format: string): boolean {\n    if (date === '') {\n      return true;\n    }\n\n    return moment(date, format, true).isValid();\n  }\n\n  // todo:: add unit test\n  getDefaultDisplayDate(current: Moment,\n                        selected: Moment[],\n                        allowMultiSelect: boolean,\n                        minDate: Moment): Moment {\n    if (current) {\n      return current.clone();\n    } else if (minDate && minDate.isAfter(moment())) {\n      return minDate.clone();\n    } else if (allowMultiSelect) {\n      if (selected && selected[selected.length]) {\n        return selected[selected.length].clone();\n      }\n    } else if (selected && selected[0]) {\n      return selected[0].clone();\n    }\n\n    return moment();\n  }\n\n  // todo:: add unit test\n  getInputType(value: CalendarValue, allowMultiSelect: boolean): ECalendarValue {\n    if (Array.isArray(value)) {\n      if (!value.length) {\n        return ECalendarValue.MomentArr;\n      } else if (typeof value[0] === 'string') {\n        return ECalendarValue.StringArr;\n      } else if (moment.isMoment(value[0])) {\n        return ECalendarValue.MomentArr;\n      }\n    } else {\n      if (typeof value === 'string') {\n        return ECalendarValue.String;\n      } else if (moment.isMoment(value)) {\n        return ECalendarValue.Moment;\n      }\n    }\n\n    return allowMultiSelect ? ECalendarValue.MomentArr : ECalendarValue.Moment;\n  }\n\n  // todo:: add unit test\n  convertToMomentArray(value: CalendarValue, format: string, allowMultiSelect: boolean): Moment[] {\n    switch (this.getInputType(value, allowMultiSelect)) {\n      case (ECalendarValue.String):\n        return value ? [moment(<string>value, format, true)] : [];\n      case (ECalendarValue.StringArr):\n        return (<string[]>value).map(v => v ? moment(v, format, true) : null).filter(Boolean);\n      case (ECalendarValue.Moment):\n        return value ? [(<Moment>value).clone()] : [];\n      case (ECalendarValue.MomentArr):\n        return (<Moment[]>value || []).map(v => v.clone());\n      default:\n        return [];\n    }\n  }\n\n  // todo:: add unit test\n  convertFromMomentArray(format: string,\n                         value: Moment[],\n                         convertTo: ECalendarValue): CalendarValue {\n    switch (convertTo) {\n      case (ECalendarValue.String):\n        return value[0] && value[0].format(format);\n      case (ECalendarValue.StringArr):\n        return value.filter(Boolean).map(v => v.format(format));\n      case (ECalendarValue.Moment):\n        return value[0] ? value[0].clone() : value[0];\n      case (ECalendarValue.MomentArr):\n        return value ? value.map(v => v.clone()) : value;\n      default:\n        return value;\n    }\n  }\n\n  convertToString(value: CalendarValue, format: string): string {\n    let tmpVal: string[];\n\n    if (typeof value === 'string') {\n      tmpVal = [value];\n    } else if (Array.isArray(value)) {\n      if (value.length) {\n        tmpVal = (<SingleCalendarValue[]>value).map((v) => {\n          return this.convertToMoment(v, format).format(format);\n        });\n      } else {\n        tmpVal = <string[]>value;\n      }\n    } else if (moment.isMoment(value)) {\n      tmpVal = [value.format(format)];\n    } else {\n      return '';\n    }\n\n    return tmpVal.filter(Boolean).join(' | ');\n  }\n\n  // todo:: add unit test\n  clearUndefined<T>(obj: T): T {\n    if (!obj) {\n      return obj;\n    }\n\n    Object.keys(obj).forEach((key) => (obj[key] === undefined) && delete obj[key]);\n    return obj;\n  }\n\n  updateSelected(isMultiple: boolean,\n                 currentlySelected: Moment[],\n                 date: IDate,\n                 granularity: unitOfTime.Base = 'day'): Moment[] {\n    if (isMultiple) {\n      return !date.selected\n        ? currentlySelected.concat([date.date])\n        : currentlySelected.filter(d => !d.isSame(date.date, granularity));\n    } else {\n      return !date.selected ? [date.date] : [];\n    }\n  }\n\n  closestParent(element: HTMLElement, selector: string): HTMLElement {\n    if (!element) {\n      return undefined;\n    }\n    const match = <HTMLElement>element.querySelector(selector);\n    return match || this.closestParent(element.parentElement, selector);\n  }\n\n  onlyTime(m: Moment): Moment {\n    return m && moment.isMoment(m) && moment(m.format('HH:mm:ss'), 'HH:mm:ss');\n  }\n\n  granularityFromType(calendarType: CalendarMode): unitOfTime.Base {\n    switch (calendarType) {\n      case 'time':\n        return 'second';\n      case 'daytime':\n        return 'second';\n      default:\n        return calendarType;\n    }\n  }\n\n  createValidator({minDate, maxDate, minTime, maxTime}: DateLimits,\n                  format: string,\n                  calendarType: CalendarMode): DateValidator {\n    let isValid: boolean;\n    let value: Moment[];\n    const validators = [];\n    const granularity = this.granularityFromType(calendarType);\n\n    if (minDate) {\n      const md = this.convertToMoment(minDate, format);\n      validators.push({\n        key: 'minDate',\n        isValid: () => {\n          const _isValid = value.every(val => val.isSameOrAfter(md, granularity));\n          isValid = isValid ? _isValid : false;\n          return _isValid;\n        }\n      });\n    }\n\n    if (maxDate) {\n      const md = this.convertToMoment(maxDate, format);\n      validators.push({\n        key: 'maxDate',\n        isValid: () => {\n          const _isValid = value.every(val => val.isSameOrBefore(md, granularity));\n          isValid = isValid ? _isValid : false;\n          return _isValid;\n        }\n      });\n    }\n\n    if (minTime) {\n      const md = this.onlyTime(this.convertToMoment(minTime, format));\n      validators.push({\n        key: 'minTime',\n        isValid: () => {\n          const _isValid = value.every(val => this.onlyTime(val).isSameOrAfter(md));\n          isValid = isValid ? _isValid : false;\n          return _isValid;\n        }\n      });\n    }\n\n    if (maxTime) {\n      const md = this.onlyTime(this.convertToMoment(maxTime, format));\n      validators.push({\n        key: 'maxTime',\n        isValid: () => {\n          const _isValid = value.every(val => this.onlyTime(val).isSameOrBefore(md));\n          isValid = isValid ? _isValid : false;\n          return _isValid;\n        }\n      });\n    }\n\n    return (inputVal: CalendarValue) => {\n      isValid = true;\n\n      value = this.convertToMomentArray(inputVal, format, true).filter(Boolean);\n\n      if (!value.every(val => val.isValid())) {\n        return {\n          format: {\n            given: inputVal\n          }\n        };\n      }\n\n      const errors = validators.reduce((map, err) => {\n        if (!err.isValid()) {\n          map[err.key] = {\n            given: value\n          };\n        }\n\n        return map;\n      }, {});\n\n      return !isValid ? errors : null;\n    };\n  }\n\n  datesStringToStringArray(value: string): string[] {\n    return (value || '').split('|').map(m => m.trim()).filter(Boolean);\n  }\n\n  getValidMomentArray(value: string, format: string): Moment[] {\n    return this.datesStringToStringArray(value)\n      .filter(d => this.isDateValid(d, format))\n      .map(d => moment(d, format));\n  }\n\n  shouldShowCurrent(showGoToCurrent: boolean,\n                    mode: CalendarMode,\n                    min: Moment,\n                    max: Moment): boolean {\n    return showGoToCurrent &&\n      mode !== 'time' &&\n      this.isDateInRange(moment(), min, max);\n  }\n\n  isDateInRange(date: Moment, from: Moment, to: Moment): boolean {\n    return date.isBetween(from, to, 'day', '[]');\n  }\n\n  convertPropsToMoment(obj: {[key: string]: any}, format: string, props: string[]) {\n    props.forEach((prop) => {\n      if (obj.hasOwnProperty(prop)) {\n        obj[prop] = this.convertToMoment(obj[prop], format);\n      }\n    });\n  }\n\n  shouldResetCurrentView<T extends ICalendarInternal>(prevConf: T, currentConf: T): boolean {\n    if (prevConf && currentConf) {\n      if (!prevConf.min && currentConf.min) {\n        return true;\n      } else if (prevConf.min && currentConf.min && !prevConf.min.isSame(currentConf.min, 'd')) {\n        return true;\n      } else if (!prevConf.max && currentConf.max) {\n        return true;\n      } else if (prevConf.max && currentConf.max && !prevConf.max.isSame(currentConf.max, 'd')) {\n        return true;\n      }\n\n      return false;\n    }\n\n    return false;\n  }\n\n  getNativeElement(elem: HTMLElement | string): HTMLElement {\n    if (!elem) {\n      return null;\n    } else if (typeof elem === 'string') {\n      return <HTMLElement>document.querySelector(elem);\n    } else {\n      return elem;\n    }\n  }\n}\n","import {Injectable} from '@angular/core';\nimport * as momentNs from 'moment';\nimport {Moment} from 'moment';\nimport {WeekDays} from '../common/types/week-days.type';\nimport {UtilsService} from '../common/services/utils/utils.service';\nimport {IDay} from './day.model';\nimport {IDayCalendarConfig, IDayCalendarConfigInternal} from './day-calendar-config.model';\nimport {IMonthCalendarConfig} from '../month-calendar/month-calendar-config';\n\nconst moment = momentNs;\n\n@Injectable()\nexport class DayCalendarService {\n  private readonly DAYS = ['su', 'mo', 'tu', 'we', 'th', 'fr', 'sa'];\n  readonly DEFAULT_CONFIG: IDayCalendarConfig = {\n    showNearMonthDays: true,\n    showWeekNumbers: false,\n    firstDayOfWeek: 'su',\n    weekDayFormat: 'ddd',\n    format: 'DD-MM-YYYY',\n    allowMultiSelect: false,\n    monthFormat: 'MMM, YYYY',\n    enableMonthSelector: true,\n    locale: moment.locale(),\n    dayBtnFormat: 'DD',\n    unSelectOnClick: true\n  };\n\n  constructor(private utilsService: UtilsService) {\n  }\n\n  private removeNearMonthWeeks(currentMonth: Moment, monthArray: IDay[][]): IDay[][] {\n    if (monthArray[monthArray.length - 1].find((day) => day.date.isSame(currentMonth, 'month'))) {\n      return monthArray;\n    } else {\n      return monthArray.slice(0, -1);\n    }\n  }\n\n  getConfig(config: IDayCalendarConfig): IDayCalendarConfigInternal {\n    const _config = <IDayCalendarConfigInternal>{\n      ...this.DEFAULT_CONFIG,\n      ...this.utilsService.clearUndefined(config)\n    };\n\n    this.utilsService.convertPropsToMoment(_config, _config.format, ['min', 'max']);\n\n    moment.locale(_config.locale);\n\n    return _config;\n  }\n\n  generateDaysMap(firstDayOfWeek: WeekDays) {\n    const firstDayIndex = this.DAYS.indexOf(firstDayOfWeek);\n    const daysArr = this.DAYS.slice(firstDayIndex, 7).concat(this.DAYS.slice(0, firstDayIndex));\n    return daysArr.reduce((map, day, index) => {\n      map[day] = index;\n\n      return map;\n    }, <{[key: string]: number}>{});\n  }\n\n  generateMonthArray(config: IDayCalendarConfigInternal, month: Moment, selected: Moment[]): IDay[][] {\n    let monthArray: IDay[][] = [];\n    const firstDayOfWeekIndex = this.DAYS.indexOf(config.firstDayOfWeek);\n    const firstDayOfBoard = month.clone().startOf('month');\n\n    while (firstDayOfBoard.day() !== firstDayOfWeekIndex) {\n      firstDayOfBoard.subtract(1, 'day');\n    }\n\n    const current = firstDayOfBoard.clone();\n    const prevMonth = month.clone().subtract(1, 'month');\n    const nextMonth = month.clone().add(1, 'month');\n    const today = moment();\n\n    const daysOfCalendar: IDay[] = this.utilsService.createArray(42)\n      .reduce((array: IDay[]) => {\n        array.push({\n          date: current.clone(),\n          selected: !!selected.find(selectedDay => current.isSame(selectedDay, 'day')),\n          currentMonth: current.isSame(month, 'month'),\n          prevMonth: current.isSame(prevMonth, 'month'),\n          nextMonth: current.isSame(nextMonth, 'month'),\n          currentDay: current.isSame(today, 'day'),\n          disabled: this.isDateDisabled(current, config)\n        });\n        current.add(1, 'day');\n\n        return array;\n      }, []);\n\n    daysOfCalendar.forEach((day, index) => {\n      const weekIndex = Math.floor(index / 7);\n\n      if (!monthArray[weekIndex]) {\n        monthArray.push([]);\n      }\n\n      monthArray[weekIndex].push(day);\n    });\n\n    if (!config.showNearMonthDays) {\n      monthArray = this.removeNearMonthWeeks(month, monthArray);\n    }\n\n    return monthArray;\n  }\n\n  generateWeekdays(firstDayOfWeek: WeekDays): Moment[] {\n    const weekdayNames: {[key: string]: Moment} = {\n      su: moment().day(0),\n      mo: moment().day(1),\n      tu: moment().day(2),\n      we: moment().day(3),\n      th: moment().day(4),\n      fr: moment().day(5),\n      sa: moment().day(6)\n    };\n    const weekdays: Moment[] = [];\n    const daysMap = this.generateDaysMap(firstDayOfWeek);\n\n    for (const dayKey in daysMap) {\n      if (daysMap.hasOwnProperty(dayKey)) {\n        weekdays[daysMap[dayKey]] = weekdayNames[dayKey];\n      }\n    }\n\n    return weekdays;\n  }\n\n  isDateDisabled(date: Moment, config: IDayCalendarConfigInternal): boolean {\n    if (config.isDayDisabledCallback) {\n      return config.isDayDisabledCallback(date);\n    }\n\n    if (config.min && date.isBefore(config.min, 'day')) {\n      return true;\n    }\n\n    return !!(config.max && date.isAfter(config.max, 'day'));\n  }\n\n  // todo:: add unit tests\n  getHeaderLabel(config: IDayCalendarConfigInternal, month: Moment): string {\n    if (config.monthFormatter) {\n      return config.monthFormatter(month);\n    }\n\n    return month.format(config.monthFormat);\n  }\n\n  // todo:: add unit tests\n  shouldShowLeft(min: Moment, currentMonthView: Moment): boolean {\n    return min ? min.isBefore(currentMonthView, 'month') : true;\n  }\n\n  // todo:: add unit tests\n  shouldShowRight(max: Moment, currentMonthView: Moment): boolean {\n    return max ? max.isAfter(currentMonthView, 'month') : true;\n  }\n\n  generateDaysIndexMap(firstDayOfWeek: WeekDays) {\n    const firstDayIndex = this.DAYS.indexOf(firstDayOfWeek);\n    const daysArr = this.DAYS.slice(firstDayIndex, 7).concat(this.DAYS.slice(0, firstDayIndex));\n    return daysArr.reduce((map, day, index) => {\n      map[index] = day;\n\n      return map;\n    }, <{[key: number]: string}>{});\n  }\n\n  getMonthCalendarConfig(componentConfig: IDayCalendarConfigInternal): IMonthCalendarConfig {\n    return this.utilsService.clearUndefined({\n      min: componentConfig.min,\n      max: componentConfig.max,\n      format: componentConfig.format,\n      isNavHeaderBtnClickable: true,\n      allowMultiSelect: false,\n      yearFormat: componentConfig.yearFormat,\n      yearFormatter: componentConfig.yearFormatter,\n      monthBtnFormat: componentConfig.monthBtnFormat,\n      monthBtnFormatter: componentConfig.monthBtnFormatter,\n      monthBtnCssClassCallback: componentConfig.monthBtnCssClassCallback,\n      multipleYearsNavigateBy: componentConfig.multipleYearsNavigateBy,\n      showMultipleYearsNavigation: componentConfig.showMultipleYearsNavigation,\n      showGoToCurrent: componentConfig.showGoToCurrent\n    });\n  }\n\n  getDayBtnText(config: IDayCalendarConfigInternal, day: Moment): string {\n    if (config.dayBtnFormatter) {\n      return config.dayBtnFormatter(day);\n    }\n\n    return day.format(config.dayBtnFormat);\n  }\n\n  getDayBtnCssClass(config: IDayCalendarConfigInternal, day: Moment): string {\n    if (config.dayBtnCssClassCallback) {\n      return config.dayBtnCssClassCallback(day);\n    }\n\n    return '';\n  }\n}\n","import {ECalendarValue} from '../common/types/calendar-value-enum';\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\nimport {ECalendarMode} from '../common/types/calendar-mode-enum';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChange,\n  SimpleChanges,\n  ViewEncapsulation\n} from '@angular/core';\nimport {DayCalendarService} from './day-calendar.service';\nimport * as momentNs from 'moment';\nimport {Moment, unitOfTime} from 'moment';\nimport {IDayCalendarConfig, IDayCalendarConfigInternal} from './day-calendar-config.model';\nimport {IDay} from './day.model';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport {CalendarValue} from '../common/types/calendar-value';\nimport {UtilsService} from '../common/services/utils/utils.service';\nimport {IMonthCalendarConfig} from '../month-calendar/month-calendar-config';\nimport {IMonth} from '../month-calendar/month.model';\nimport {DateValidator} from '../common/types/validator.type';\nimport {INavEvent} from '../common/models/navigation-event.model';\nconst moment = momentNs;\n\n@Component({\n  selector: 'dp-day-calendar',\n  templateUrl: 'day-calendar.component.html',\n  styleUrls: ['day-calendar.component.less'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    DayCalendarService,\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DayCalendarComponent),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => DayCalendarComponent),\n      multi: true\n    }\n  ]\n})\nexport class DayCalendarComponent implements OnInit, OnChanges, ControlValueAccessor, Validator {\n\n  @Input() config: IDayCalendarConfig;\n  @Input() displayDate: SingleCalendarValue;\n  @Input() minDate: Moment;\n  @Input() maxDate: Moment;\n  @HostBinding('class') @Input() theme: string;\n\n  @Output() onSelect: EventEmitter<IDay> = new EventEmitter();\n  @Output() onMonthSelect: EventEmitter<IMonth> = new EventEmitter();\n  @Output() onNavHeaderBtnClick: EventEmitter<ECalendarMode> = new EventEmitter();\n  @Output() onGoToCurrent: EventEmitter<void> = new EventEmitter();\n  @Output() onLeftNav: EventEmitter<INavEvent> = new EventEmitter();\n  @Output() onRightNav: EventEmitter<INavEvent> = new EventEmitter();\n\n  CalendarMode = ECalendarMode;\n  isInited: boolean = false;\n  componentConfig: IDayCalendarConfigInternal;\n  _selected: Moment[];\n  weeks: IDay[][];\n  weekdays: Moment[];\n  _currentDateView: Moment;\n  inputValue: CalendarValue;\n  inputValueType: ECalendarValue;\n  validateFn: DateValidator;\n  currentCalendarMode: ECalendarMode = ECalendarMode.Day;\n  monthCalendarConfig: IMonthCalendarConfig;\n  _shouldShowCurrent: boolean = true;\n  navLabel: string;\n  showLeftNav: boolean;\n  showRightNav: boolean;\n\n  api = {\n    moveCalendarsBy: this.moveCalendarsBy.bind(this),\n    moveCalendarTo: this.moveCalendarTo.bind(this),\n    toggleCalendarMode: this.toggleCalendarMode.bind(this)\n  };\n\n  set selected(selected: Moment[]) {\n    this._selected = selected;\n    this.onChangeCallback(this.processOnChangeCallback(selected));\n  }\n\n  get selected(): Moment[] {\n    return this._selected;\n  }\n\n  set currentDateView(current: Moment) {\n    this._currentDateView = current.clone();\n    this.weeks = this.dayCalendarService\n      .generateMonthArray(this.componentConfig, this._currentDateView, this.selected);\n    this.navLabel = this.dayCalendarService.getHeaderLabel(this.componentConfig, this._currentDateView);\n    this.showLeftNav = this.dayCalendarService.shouldShowLeft(this.componentConfig.min, this.currentDateView);\n    this.showRightNav = this.dayCalendarService.shouldShowRight(this.componentConfig.max, this.currentDateView);\n  }\n\n  get currentDateView(): Moment {\n    return this._currentDateView;\n  }\n\n  constructor(public readonly dayCalendarService: DayCalendarService,\n              public readonly utilsService: UtilsService,\n              public readonly cd: ChangeDetectorRef) {\n  }\n\n  ngOnInit() {\n    this.isInited = true;\n    this.init();\n    this.initValidators();\n  }\n\n  init() {\n    this.componentConfig = this.dayCalendarService.getConfig(this.config);\n    this.selected = this.selected || [];\n    this.currentDateView = this.displayDate\n      ? this.utilsService.convertToMoment(this.displayDate, this.componentConfig.format).clone()\n      : this.utilsService\n        .getDefaultDisplayDate(\n          this.currentDateView,\n          this.selected,\n          this.componentConfig.allowMultiSelect,\n          this.componentConfig.min\n        );\n    this.weekdays = this.dayCalendarService\n      .generateWeekdays(this.componentConfig.firstDayOfWeek);\n    this.inputValueType = this.utilsService.getInputType(this.inputValue, this.componentConfig.allowMultiSelect);\n    this.monthCalendarConfig = this.dayCalendarService.getMonthCalendarConfig(this.componentConfig);\n    this._shouldShowCurrent = this.shouldShowCurrent();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (this.isInited) {\n      const {minDate, maxDate, config} = changes;\n\n      this.handleConfigChange(config);\n      this.init();\n\n      if (minDate || maxDate) {\n        this.initValidators();\n      }\n    }\n  }\n\n  writeValue(value: CalendarValue): void {\n    this.inputValue = value;\n\n    if (value) {\n      this.selected = this.utilsService\n        .convertToMomentArray(value, this.componentConfig.format, this.componentConfig.allowMultiSelect);\n      this.inputValueType = this.utilsService\n        .getInputType(this.inputValue, this.componentConfig.allowMultiSelect);\n    } else {\n      this.selected = [];\n    }\n\n    this.weeks = this.dayCalendarService\n      .generateMonthArray(this.componentConfig, this.currentDateView, this.selected);\n\n    this.cd.markForCheck();\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChangeCallback = fn;\n  }\n\n  onChangeCallback(_: any) {\n  };\n\n  registerOnTouched(fn: any): void {\n  }\n\n  validate(formControl: FormControl): ValidationErrors | any {\n    if (this.minDate || this.maxDate) {\n      return this.validateFn(formControl.value);\n    } else {\n      return () => null;\n    }\n  }\n\n  processOnChangeCallback(value: Moment[]): CalendarValue {\n    return this.utilsService.convertFromMomentArray(\n      this.componentConfig.format,\n      value,\n      this.componentConfig.returnedValueType || this.inputValueType\n    );\n  }\n\n  initValidators() {\n    this.validateFn = this.utilsService.createValidator(\n      {minDate: this.minDate, maxDate: this.maxDate},\n      this.componentConfig.format,\n      'day'\n    );\n\n    this.onChangeCallback(this.processOnChangeCallback(this.selected));\n  }\n\n  dayClicked(day: IDay) {\n    if (day.selected && !this.componentConfig.unSelectOnClick) {\n      return;\n    }\n\n    this.selected = this.utilsService\n      .updateSelected(this.componentConfig.allowMultiSelect, this.selected, day);\n    this.weeks = this.dayCalendarService\n      .generateMonthArray(this.componentConfig, this.currentDateView, this.selected);\n    this.onSelect.emit(day);\n  }\n\n  getDayBtnText(day: IDay): string {\n    return this.dayCalendarService.getDayBtnText(this.componentConfig, day.date);\n  }\n\n  getDayBtnCssClass(day: IDay): {[klass: string]: boolean} {\n    const cssClasses: {[klass: string]: boolean} = {\n      'dp-selected': day.selected,\n      'dp-current-month': day.currentMonth,\n      'dp-prev-month': day.prevMonth,\n      'dp-next-month': day.nextMonth,\n      'dp-current-day': day.currentDay\n    };\n    const customCssClass: string = this.dayCalendarService.getDayBtnCssClass(this.componentConfig, day.date);\n    if (customCssClass) {\n      cssClasses[customCssClass] = true;\n    }\n\n    return cssClasses;\n  }\n\n  onLeftNavClick() {\n    const from = this.currentDateView.clone();\n    this.moveCalendarsBy(this.currentDateView, -1, 'month');\n    const to = this.currentDateView.clone();\n    this.onLeftNav.emit({from, to});\n  }\n\n  onRightNavClick() {\n    const from = this.currentDateView.clone();\n    this.moveCalendarsBy(this.currentDateView, 1, 'month');\n    const to = this.currentDateView.clone();\n    this.onRightNav.emit({from, to});\n  }\n\n  onMonthCalendarLeftClick(change: INavEvent) {\n    this.onLeftNav.emit(change);\n  }\n\n  onMonthCalendarRightClick(change: INavEvent) {\n    this.onRightNav.emit(change);\n  }\n\n  onMonthCalendarSecondaryLeftClick(change: INavEvent) {\n    this.onRightNav.emit(change);\n  }\n\n  onMonthCalendarSecondaryRightClick(change: INavEvent) {\n    this.onLeftNav.emit(change);\n  }\n\n  getWeekdayName(weekday: Moment): string {\n    if (this.componentConfig.weekDayFormatter) {\n      return this.componentConfig.weekDayFormatter(weekday.day());\n    }\n\n    return weekday.format(this.componentConfig.weekDayFormat);\n  }\n\n  toggleCalendarMode(mode: ECalendarMode) {\n    if (this.currentCalendarMode !== mode) {\n      this.currentCalendarMode = mode;\n      this.onNavHeaderBtnClick.emit(mode);\n    }\n\n    this.cd.markForCheck();\n  }\n\n  monthSelected(month: IMonth) {\n    this.currentDateView = month.date.clone();\n    this.currentCalendarMode = ECalendarMode.Day;\n    this.onMonthSelect.emit(month);\n  }\n\n  moveCalendarsBy(current: Moment, amount: number, granularity: unitOfTime.Base = 'month') {\n    this.currentDateView = current.clone().add(amount, granularity);\n    this.cd.markForCheck();\n  }\n\n  moveCalendarTo(to: SingleCalendarValue) {\n    if (to) {\n      this.currentDateView = this.utilsService.convertToMoment(to, this.componentConfig.format);\n    }\n\n    this.cd.markForCheck();\n  }\n\n  shouldShowCurrent(): boolean {\n    return this.utilsService.shouldShowCurrent(\n      this.componentConfig.showGoToCurrent,\n      'day',\n      this.componentConfig.min,\n      this.componentConfig.max\n    );\n  }\n\n  goToCurrent() {\n    this.currentDateView = moment();\n    this.onGoToCurrent.emit();\n  }\n\n  handleConfigChange(config: SimpleChange) {\n    if (config) {\n      const prevConf: IDayCalendarConfigInternal = this.dayCalendarService.getConfig(config.previousValue);\n      const currentConf: IDayCalendarConfigInternal = this.dayCalendarService.getConfig(config.currentValue);\n\n      if (this.utilsService.shouldResetCurrentView(prevConf, currentConf)) {\n        this._currentDateView = null;\n      }\n    }\n  }\n}\n","import {Injectable} from '@angular/core';\nimport * as momentNs from 'moment';\nimport {Moment} from 'moment';\nimport {UtilsService} from '../common/services/utils/utils.service';\nimport {ITimeSelectConfig, ITimeSelectConfigInternal} from './time-select-config.model';\nconst moment = momentNs;\n\nexport type TimeUnit = 'hour' | 'minute' | 'second';\nexport const FIRST_PM_HOUR = 12;\n\n@Injectable()\nexport class TimeSelectService {\n  readonly DEFAULT_CONFIG: ITimeSelectConfigInternal = {\n    hours12Format: 'hh',\n    hours24Format: 'HH',\n    meridiemFormat: 'A',\n    minutesFormat: 'mm',\n    minutesInterval: 1,\n    secondsFormat: 'ss',\n    secondsInterval: 1,\n    showSeconds: false,\n    showTwentyFourHours: false,\n    timeSeparator: ':',\n    locale: moment.locale()\n  };\n\n  constructor(private utilsService: UtilsService) {\n  }\n\n  getConfig(config: ITimeSelectConfig): ITimeSelectConfigInternal {\n    const timeConfigs = {\n      maxTime: this.utilsService.onlyTime(config && config.maxTime),\n      minTime: this.utilsService.onlyTime(config && config.minTime)\n    };\n\n    const _config = <ITimeSelectConfigInternal>{\n      ...this.DEFAULT_CONFIG,\n      ...this.utilsService.clearUndefined(config),\n      ...timeConfigs\n    };\n\n    moment.locale(_config.locale);\n\n    return _config;\n  }\n\n  getTimeFormat(config: ITimeSelectConfigInternal): string {\n    return (config.showTwentyFourHours ? config.hours24Format : config.hours12Format)\n      + config.timeSeparator + config.minutesFormat\n      + (config.showSeconds ? (config.timeSeparator + config.secondsFormat) : '')\n      + (config.showTwentyFourHours ? '' : ' ' + config.meridiemFormat);\n  }\n\n  getHours(config: ITimeSelectConfigInternal, t: Moment | null): string {\n    const time = t || moment();\n    return time && time.format(config.showTwentyFourHours ? config.hours24Format : config.hours12Format);\n  }\n\n  getMinutes(config: ITimeSelectConfigInternal, t: Moment | null): string {\n    const time = t || moment();\n    return time && time.format(config.minutesFormat);\n  }\n\n  getSeconds(config: ITimeSelectConfigInternal, t: Moment | null): string {\n    const time = t || moment();\n    return time && time.format(config.secondsFormat);\n  }\n\n  getMeridiem(config: ITimeSelectConfigInternal, time: Moment): string {\n    return time && time.format(config.meridiemFormat);\n  }\n\n  decrease(config: ITimeSelectConfigInternal, time: Moment, unit: TimeUnit): Moment {\n    let amount: number = 1;\n    switch (unit) {\n      case 'minute':\n        amount = config.minutesInterval;\n        break;\n      case 'second':\n        amount = config.secondsInterval;\n        break;\n    }\n    return time.clone().subtract(amount, unit);\n  }\n\n  increase(config: ITimeSelectConfigInternal, time: Moment, unit: TimeUnit): Moment {\n    let amount: number = 1;\n    switch (unit) {\n      case 'minute':\n        amount = config.minutesInterval;\n        break;\n      case 'second':\n        amount = config.secondsInterval;\n        break;\n    }\n    return time.clone().add(amount, unit);\n  }\n\n  toggleMeridiem(time: Moment): Moment {\n    if (time.hours() < FIRST_PM_HOUR) {\n      return time.clone().add(12, 'hour');\n    } else {\n      return time.clone().subtract(12, 'hour');\n    }\n  }\n\n  shouldShowDecrease(config: ITimeSelectConfigInternal, time: Moment, unit: TimeUnit): boolean {\n    if (!config.min && !config.minTime) {\n      return true;\n    }\n    ;\n    const newTime = this.decrease(config, time, unit);\n\n    return (!config.min || config.min.isSameOrBefore(newTime))\n      && (!config.minTime || config.minTime.isSameOrBefore(this.utilsService.onlyTime(newTime)));\n  }\n\n  shouldShowIncrease(config: ITimeSelectConfigInternal, time: Moment, unit: TimeUnit): boolean {\n    if (!config.max && !config.maxTime) {\n      return true;\n    }\n    ;\n    const newTime = this.increase(config, time, unit);\n\n    return (!config.max || config.max.isSameOrAfter(newTime))\n      && (!config.maxTime || config.maxTime.isSameOrAfter(this.utilsService.onlyTime(newTime)));\n  }\n\n  shouldShowToggleMeridiem(config: ITimeSelectConfigInternal, time: Moment): boolean {\n    if (!config.min && !config.max && !config.minTime && !config.maxTime) {\n      return true;\n    }\n    const newTime = this.toggleMeridiem(time);\n    return (!config.max || config.max.isSameOrAfter(newTime))\n      && (!config.min || config.min.isSameOrBefore(newTime))\n      && (!config.maxTime || config.maxTime.isSameOrAfter(this.utilsService.onlyTime(newTime)))\n      && (!config.minTime || config.minTime.isSameOrBefore(this.utilsService.onlyTime(newTime)));\n  }\n}\n","import {Injectable} from '@angular/core';\nimport * as momentNs from 'moment';\nimport {Moment} from 'moment';\n\nimport {UtilsService} from '../common/services/utils/utils.service';\nimport {DayCalendarService} from '../day-calendar/day-calendar.service';\nimport {TimeSelectService} from '../time-select/time-select.service';\nimport {IDayTimeCalendarConfig} from './day-time-calendar-config.model';\nconst moment = momentNs;\n\nconst DAY_FORMAT = 'YYYYMMDD';\nconst TIME_FORMAT = 'HH:mm:ss';\nconst COMBINED_FORMAT = DAY_FORMAT + TIME_FORMAT;\n\n@Injectable()\nexport class DayTimeCalendarService {\n  readonly DEFAULT_CONFIG: IDayTimeCalendarConfig = {\n    locale: moment.locale()\n  };\n\n  constructor(private utilsService: UtilsService,\n              private dayCalendarService: DayCalendarService,\n              private timeSelectService: TimeSelectService) {\n  }\n\n  getConfig(config: IDayTimeCalendarConfig): IDayTimeCalendarConfig {\n    const _config = {\n      ...this.DEFAULT_CONFIG,\n      ...this.timeSelectService.getConfig(config),\n      ...this.dayCalendarService.getConfig(config)\n    };\n\n    moment.locale(config.locale);\n\n    return _config;\n  }\n\n  updateDay(current: Moment, day: Moment, config: IDayTimeCalendarConfig): Moment {\n    const time = current ? current : moment();\n    let updated = moment(day.format(DAY_FORMAT) + time.format(TIME_FORMAT), COMBINED_FORMAT)\n\n    if (config.min) {\n      const min = <Moment>config.min;\n      updated = min.isAfter(updated) ? min : updated;\n    }\n\n    if (config.max) {\n      const max = <Moment>config.max;\n      updated = max.isBefore(updated) ? max : updated;\n    }\n\n    return updated;\n  }\n\n  updateTime(current: Moment, time: Moment): Moment {\n    const day = current ? current : moment();\n\n    return moment(day.format(DAY_FORMAT) + time.format(TIME_FORMAT), COMBINED_FORMAT);\n  }\n}\n","import {ECalendarValue} from '../common/types/calendar-value-enum';\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewEncapsulation\n} from '@angular/core';\nimport {TimeSelectService, TimeUnit} from './time-select.service';\nimport * as momentNs from 'moment';\nimport {Moment} from 'moment';\nimport {ITimeSelectConfig, ITimeSelectConfigInternal} from './time-select-config.model';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport {CalendarValue} from '../common/types/calendar-value';\nimport {UtilsService} from '../common/services/utils/utils.service';\nimport {IDate} from '../common/models/date.model';\nimport {DateValidator} from '../common/types/validator.type';\nconst moment = momentNs;\n\n@Component({\n  selector: 'dp-time-select',\n  templateUrl: 'time-select.component.html',\n  styleUrls: ['time-select.component.less'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    TimeSelectService,\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => TimeSelectComponent),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => TimeSelectComponent),\n      multi: true\n    }\n  ]\n})\nexport class TimeSelectComponent implements OnInit, OnChanges, ControlValueAccessor, Validator {\n\n  @Input() config: ITimeSelectConfig;\n  @Input() displayDate: SingleCalendarValue;\n  @Input() minDate: SingleCalendarValue;\n  @Input() maxDate: SingleCalendarValue;\n  @Input() minTime: SingleCalendarValue;\n  @Input() maxTime: SingleCalendarValue;\n  @HostBinding('class') @Input() theme: string;\n\n  @Output() onChange: EventEmitter<IDate> = new EventEmitter();\n\n  isInited: boolean = false;\n  componentConfig: ITimeSelectConfigInternal;\n  _selected: Moment;\n  inputValue: CalendarValue;\n  inputValueType: ECalendarValue;\n  validateFn: DateValidator;\n\n  hours: string;\n  minutes: string;\n  seconds: string;\n  meridiem: string;\n\n  showDecHour: boolean;\n  showDecMinute: boolean;\n  showDecSecond: boolean;\n  showIncHour: boolean;\n  showIncMinute: boolean;\n  showIncSecond: boolean;\n  showToggleMeridiem: boolean;\n\n  set selected(selected: Moment) {\n    this._selected = selected;\n    this.calculateTimeParts(this.selected);\n\n    this.showDecHour = this.timeSelectService.shouldShowDecrease(this.componentConfig, this._selected, 'hour');\n    this.showDecMinute = this.timeSelectService.shouldShowDecrease(this.componentConfig, this._selected, 'minute');\n    this.showDecSecond = this.timeSelectService.shouldShowDecrease(this.componentConfig, this._selected, 'second');\n\n    this.showIncHour = this.timeSelectService.shouldShowIncrease(this.componentConfig, this._selected, 'hour');\n    this.showIncMinute = this.timeSelectService.shouldShowIncrease(this.componentConfig, this._selected, 'minute');\n    this.showIncSecond = this.timeSelectService.shouldShowIncrease(this.componentConfig, this._selected, 'second');\n\n    this.showToggleMeridiem = this.timeSelectService.shouldShowToggleMeridiem(this.componentConfig, this._selected);\n\n    this.onChangeCallback(this.processOnChangeCallback(selected));\n  }\n\n  get selected(): Moment {\n    return this._selected;\n  }\n\n  api = {\n    triggerChange: this.emitChange.bind(this)\n  };\n\n  constructor(public timeSelectService: TimeSelectService,\n              public utilsService: UtilsService,\n              public cd: ChangeDetectorRef) {\n  }\n\n  ngOnInit() {\n    this.isInited = true;\n    this.init();\n    this.initValidators();\n  }\n\n  init() {\n    this.componentConfig = this.timeSelectService.getConfig(this.config);\n    this.selected = this.selected || moment();\n    this.inputValueType = this.utilsService.getInputType(this.inputValue, false);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (this.isInited) {\n      const {minDate, maxDate, minTime, maxTime} = changes;\n      this.init();\n\n      if (minDate || maxDate || minTime || maxTime) {\n        this.initValidators();\n      }\n    }\n  }\n\n  writeValue(value: CalendarValue): void {\n    this.inputValue = value;\n\n    if (value) {\n      const momentValue = this.utilsService\n        .convertToMomentArray(value, this.timeSelectService.getTimeFormat(this.componentConfig), false)[0];\n      if (momentValue.isValid()) {\n        this.selected = momentValue;\n        this.inputValueType = this.utilsService\n          .getInputType(this.inputValue, false);\n      }\n    }\n\n    this.cd.markForCheck();\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChangeCallback = fn;\n  }\n\n  onChangeCallback(_: any) {\n  };\n\n  registerOnTouched(fn: any): void {\n  }\n\n  validate(formControl: FormControl): ValidationErrors | any {\n    if (this.minDate || this.maxDate || this.minTime || this.maxTime) {\n      return this.validateFn(formControl.value);\n    } else {\n      return () => null;\n    }\n  }\n\n  processOnChangeCallback(value: Moment): CalendarValue {\n    return this.utilsService.convertFromMomentArray(\n      this.timeSelectService.getTimeFormat(this.componentConfig),\n      [value],\n      this.componentConfig.returnedValueType || this.inputValueType\n    );\n  }\n\n  initValidators() {\n    this.validateFn = this.utilsService.createValidator(\n      {\n        minDate: this.minDate,\n        maxDate: this.maxDate,\n        minTime: this.minTime,\n        maxTime: this.maxTime\n      }, undefined, 'day');\n\n    this.onChangeCallback(this.processOnChangeCallback(this.selected));\n  }\n\n  decrease(unit: TimeUnit) {\n    this.selected = this.timeSelectService.decrease(this.componentConfig, this.selected, unit);\n    this.emitChange();\n  }\n\n  increase(unit: TimeUnit) {\n    this.selected = this.timeSelectService.increase(this.componentConfig, this.selected, unit);\n    this.emitChange();\n  }\n\n  toggleMeridiem() {\n    this.selected = this.timeSelectService.toggleMeridiem(this.selected);\n    this.emitChange();\n  }\n\n  emitChange() {\n    this.onChange.emit({date: this.selected, selected: false});\n    this.cd.markForCheck();\n  }\n\n  calculateTimeParts(time: Moment) {\n    this.hours = this.timeSelectService.getHours(this.componentConfig, time);\n    this.minutes = this.timeSelectService.getMinutes(this.componentConfig, time);\n    this.seconds = this.timeSelectService.getSeconds(this.componentConfig, time);\n    this.meridiem = this.timeSelectService.getMeridiem(this.componentConfig, time);\n  }\n}\n","import {EventEmitter, Injectable} from '@angular/core';\nimport {IDatePickerConfig, IDatePickerConfigInternal} from './date-picker-config.model';\nimport * as momentNs from 'moment';\nimport {Moment} from 'moment';\nimport {UtilsService} from '../common/services/utils/utils.service';\nimport {IDayCalendarConfig} from '../day-calendar/day-calendar-config.model';\nimport {TimeSelectService} from '../time-select/time-select.service';\nimport {DayTimeCalendarService} from '../day-time-calendar/day-time-calendar.service';\nimport {ITimeSelectConfig} from '../time-select/time-select-config.model';\nimport {CalendarMode} from '../common/types/calendar-mode';\nimport {CalendarValue} from '../common/types/calendar-value';\nconst moment = momentNs;\n\n@Injectable()\nexport class DatePickerService {\n  readonly onPickerClosed: EventEmitter<null> = new EventEmitter();\n  private defaultConfig: IDatePickerConfigInternal = {\n    closeOnSelect: true,\n    closeOnSelectDelay: 100,\n    format: 'DD-MM-YYYY',\n    openOnFocus: true,\n    openOnClick: true,\n    onOpenDelay: 0,\n    disableKeypress: false,\n    showNearMonthDays: true,\n    showWeekNumbers: false,\n    enableMonthSelector: true,\n    showGoToCurrent: true,\n    locale: moment.locale(),\n    hideOnOutsideClick: true\n  };\n\n  constructor(private utilsService: UtilsService,\n              private timeSelectService: TimeSelectService,\n              private daytimeCalendarService: DayTimeCalendarService) {\n  }\n\n  // todo:: add unit tests\n  getConfig(config: IDatePickerConfig, mode: CalendarMode = 'daytime'): IDatePickerConfigInternal {\n    const _config = <IDatePickerConfigInternal>{\n      ...this.defaultConfig,\n      format: this.getDefaultFormatByMode(mode),\n      ...this.utilsService.clearUndefined(config)\n    };\n\n    this.utilsService.convertPropsToMoment(_config, _config.format, ['min', 'max']);\n\n    if (config && config.allowMultiSelect && config.closeOnSelect === undefined) {\n      _config.closeOnSelect = false;\n    }\n\n    moment.locale(_config.locale);\n\n    return _config;\n  }\n\n  getDayConfigService(pickerConfig: IDatePickerConfig): IDayCalendarConfig {\n    return {\n      min: pickerConfig.min,\n      max: pickerConfig.max,\n      isDayDisabledCallback: pickerConfig.isDayDisabledCallback,\n      weekDayFormat: pickerConfig.weekDayFormat,\n      showNearMonthDays: pickerConfig.showNearMonthDays,\n      showWeekNumbers: pickerConfig.showWeekNumbers,\n      firstDayOfWeek: pickerConfig.firstDayOfWeek,\n      format: pickerConfig.format,\n      allowMultiSelect: pickerConfig.allowMultiSelect,\n      monthFormat: pickerConfig.monthFormat,\n      monthFormatter: pickerConfig.monthFormatter,\n      enableMonthSelector: pickerConfig.enableMonthSelector,\n      yearFormat: pickerConfig.yearFormat,\n      yearFormatter: pickerConfig.yearFormatter,\n      dayBtnFormat: pickerConfig.dayBtnFormat,\n      dayBtnFormatter: pickerConfig.dayBtnFormatter,\n      dayBtnCssClassCallback: pickerConfig.dayBtnCssClassCallback,\n      monthBtnFormat: pickerConfig.monthBtnFormat,\n      monthBtnFormatter: pickerConfig.monthBtnFormatter,\n      monthBtnCssClassCallback: pickerConfig.monthBtnCssClassCallback,\n      multipleYearsNavigateBy: pickerConfig.multipleYearsNavigateBy,\n      showMultipleYearsNavigation: pickerConfig.showMultipleYearsNavigation,\n      locale: pickerConfig.locale,\n      returnedValueType: pickerConfig.returnedValueType,\n      showGoToCurrent: pickerConfig.showGoToCurrent,\n      unSelectOnClick: pickerConfig.unSelectOnClick\n    };\n  }\n\n  getDayTimeConfigService(pickerConfig: IDatePickerConfig): ITimeSelectConfig {\n    return this.daytimeCalendarService.getConfig(pickerConfig);\n  }\n\n  getTimeConfigService(pickerConfig: IDatePickerConfig): ITimeSelectConfig {\n    return this.timeSelectService.getConfig(pickerConfig);\n  }\n\n  pickerClosed() {\n    this.onPickerClosed.emit();\n  }\n\n  // todo:: add unit tests\n  isValidInputDateValue(value: string, config: IDatePickerConfig): boolean {\n    value = value ? value : '';\n    const datesStrArr: string[] = this.utilsService.datesStringToStringArray(value);\n\n    return datesStrArr.every(date => this.utilsService.isDateValid(date, config.format));\n  }\n\n  // todo:: add unit tests\n  convertInputValueToMomentArray(value: string, config: IDatePickerConfig): Moment[] {\n    value = value ? value : '';\n    const datesStrArr: string[] = this.utilsService.datesStringToStringArray(value);\n\n    return this.utilsService.convertToMomentArray(datesStrArr, config.format, config.allowMultiSelect);\n  }\n\n  private getDefaultFormatByMode(mode: CalendarMode): string {\n    switch (mode) {\n      case 'day':\n        return 'DD-MM-YYYY';\n      case 'daytime':\n        return 'DD-MM-YYYY HH:mm:ss';\n      case 'time':\n        return 'HH:mm:ss';\n      case 'month':\n        return 'MMM, YYYY';\n    }\n  }\n}\n","import {Injectable} from '@angular/core';\nimport * as momentNs from 'moment';\nimport {Moment} from 'moment';\nimport {UtilsService} from '../common/services/utils/utils.service';\nimport {IMonth} from './month.model';\nimport {IMonthCalendarConfig, IMonthCalendarConfigInternal} from './month-calendar-config';\nconst moment = momentNs;\n\n@Injectable()\nexport class MonthCalendarService {\n  readonly DEFAULT_CONFIG: IMonthCalendarConfigInternal = {\n    allowMultiSelect: false,\n    yearFormat: 'YYYY',\n    format: 'MM-YYYY',\n    isNavHeaderBtnClickable: false,\n    monthBtnFormat: 'MMM',\n    locale: moment.locale(),\n    multipleYearsNavigateBy: 10,\n    showMultipleYearsNavigation: false,\n    unSelectOnClick: true\n  };\n\n  constructor(private utilsService: UtilsService) {\n  }\n\n  getConfig(config: IMonthCalendarConfig): IMonthCalendarConfigInternal {\n    const _config = <IMonthCalendarConfigInternal>{\n      ...this.DEFAULT_CONFIG,\n      ...this.utilsService.clearUndefined(config)\n    };\n\n    this.utilsService.convertPropsToMoment(_config, _config.format, ['min', 'max']);\n\n    moment.locale(_config.locale);\n\n    return _config;\n  }\n\n  generateYear(config: IMonthCalendarConfig, year: Moment, selected: Moment[] = null): IMonth[][] {\n    const index = year.clone().startOf('year');\n\n    return this.utilsService.createArray(3).map(() => {\n      return this.utilsService.createArray(4).map(() => {\n        const date = index.clone();\n        const month = {\n          date,\n          selected: !!selected.find(s => index.isSame(s, 'month')),\n          currentMonth: index.isSame(moment(), 'month'),\n          disabled: this.isMonthDisabled(date, config),\n          text: this.getMonthBtnText(config, date)\n        };\n\n        index.add(1, 'month');\n\n        return month;\n      });\n    });\n  }\n\n  isMonthDisabled(date: Moment, config: IMonthCalendarConfig) {\n    if (config.min && date.isBefore(config.min, 'month')) {\n      return true;\n    }\n\n    return !!(config.max && date.isAfter(config.max, 'month'));\n  }\n\n  shouldShowLeft(min: Moment, currentMonthView: Moment): boolean {\n    return min ? min.isBefore(currentMonthView, 'year') : true;\n  }\n\n  shouldShowRight(max: Moment, currentMonthView: Moment): boolean {\n    return max ? max.isAfter(currentMonthView, 'year') : true;\n  }\n\n  getHeaderLabel(config: IMonthCalendarConfig, year: Moment): string {\n    if (config.yearFormatter) {\n      return config.yearFormatter(year);\n    }\n\n    return year.format(config.yearFormat);\n  }\n\n  getMonthBtnText(config: IMonthCalendarConfig, month: Moment): string {\n    if (config.monthBtnFormatter) {\n      return config.monthBtnFormatter(month);\n    }\n\n    return month.format(config.monthBtnFormat);\n  }\n\n  getMonthBtnCssClass(config: IMonthCalendarConfig, month: Moment): string {\n    if (config.monthBtnCssClassCallback) {\n      return config.monthBtnCssClassCallback(month);\n    }\n\n    return '';\n  }\n}\n","import {ECalendarValue} from '../common/types/calendar-value-enum';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChange,\n  SimpleChanges,\n  ViewEncapsulation\n} from '@angular/core';\nimport {IMonth} from './month.model';\nimport {MonthCalendarService} from './month-calendar.service';\nimport * as momentNs from 'moment';\nimport {Moment} from 'moment';\nimport {IMonthCalendarConfig, IMonthCalendarConfigInternal} from './month-calendar-config';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport {CalendarValue} from '../common/types/calendar-value';\nimport {UtilsService} from '../common/services/utils/utils.service';\nimport {DateValidator} from '../common/types/validator.type';\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\nimport {INavEvent} from '../common/models/navigation-event.model';\nconst moment = momentNs;\n\n@Component({\n  selector: 'dp-month-calendar',\n  templateUrl: 'month-calendar.component.html',\n  styleUrls: ['month-calendar.component.less'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    MonthCalendarService,\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => MonthCalendarComponent),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => MonthCalendarComponent),\n      multi: true\n    }\n  ]\n})\nexport class MonthCalendarComponent implements OnInit, OnChanges, ControlValueAccessor, Validator {\n  @Input() config: IMonthCalendarConfig;\n  @Input() displayDate: Moment;\n  @Input() minDate: Moment;\n  @Input() maxDate: Moment;\n  @HostBinding('class') @Input() theme: string;\n\n  @Output() onSelect: EventEmitter<IMonth> = new EventEmitter();\n  @Output() onNavHeaderBtnClick: EventEmitter<null> = new EventEmitter();\n  @Output() onGoToCurrent: EventEmitter<void> = new EventEmitter();\n  @Output() onLeftNav: EventEmitter<INavEvent> = new EventEmitter();\n  @Output() onRightNav: EventEmitter<INavEvent> = new EventEmitter();\n  @Output() onLeftSecondaryNav: EventEmitter<INavEvent> = new EventEmitter();\n  @Output() onRightSecondaryNav: EventEmitter<INavEvent> = new EventEmitter();\n\n  isInited: boolean = false;\n  componentConfig: IMonthCalendarConfigInternal;\n  _selected: Moment[];\n  yearMonths: IMonth[][];\n  _currentDateView: Moment;\n  inputValue: CalendarValue;\n  inputValueType: ECalendarValue;\n  validateFn: DateValidator;\n  _shouldShowCurrent: boolean = true;\n  navLabel: string;\n  showLeftNav: boolean;\n  showRightNav: boolean;\n  showSecondaryLeftNav: boolean;\n  showSecondaryRightNav: boolean;\n\n  api = {\n    toggleCalendar: this.toggleCalendarMode.bind(this),\n    moveCalendarTo: this.moveCalendarTo.bind(this)\n  };\n\n  set selected(selected: Moment[]) {\n    this._selected = selected;\n    this.onChangeCallback(this.processOnChangeCallback(selected));\n  }\n\n  get selected(): Moment[] {\n    return this._selected;\n  }\n\n  set currentDateView(current: Moment) {\n    this._currentDateView = current.clone();\n    this.yearMonths = this.monthCalendarService\n      .generateYear(this.componentConfig, this._currentDateView, this.selected);\n    this.navLabel = this.monthCalendarService.getHeaderLabel(this.componentConfig, this.currentDateView);\n    this.showLeftNav = this.monthCalendarService.shouldShowLeft(this.componentConfig.min, this._currentDateView);\n    this.showRightNav = this.monthCalendarService.shouldShowRight(this.componentConfig.max, this.currentDateView);\n    this.showSecondaryLeftNav = this.componentConfig.showMultipleYearsNavigation && this.showLeftNav;\n    this.showSecondaryRightNav = this.componentConfig.showMultipleYearsNavigation && this.showRightNav;\n  }\n\n  get currentDateView(): Moment {\n    return this._currentDateView;\n  }\n\n  constructor(public readonly monthCalendarService: MonthCalendarService,\n              public readonly utilsService: UtilsService,\n              public readonly cd: ChangeDetectorRef) {\n  }\n\n  ngOnInit() {\n    this.isInited = true;\n    this.init();\n    this.initValidators();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (this.isInited) {\n      const {minDate, maxDate, config} = changes;\n\n      this.handleConfigChange(config);\n      this.init();\n\n      if (minDate || maxDate) {\n        this.initValidators();\n      }\n    }\n  }\n\n  init() {\n    this.componentConfig = this.monthCalendarService.getConfig(this.config);\n    this.selected = this.selected || [];\n    this.currentDateView = this.displayDate\n      ? this.displayDate\n      : this.utilsService\n        .getDefaultDisplayDate(\n          this.currentDateView,\n          this.selected,\n          this.componentConfig.allowMultiSelect,\n          this.componentConfig.min\n        );\n    this.inputValueType = this.utilsService.getInputType(this.inputValue, this.componentConfig.allowMultiSelect);\n    this._shouldShowCurrent = this.shouldShowCurrent();\n  }\n\n  writeValue(value: CalendarValue): void {\n    this.inputValue = value;\n\n    if (value) {\n      this.selected = this.utilsService\n        .convertToMomentArray(value, this.componentConfig.format, this.componentConfig.allowMultiSelect);\n      this.yearMonths = this.monthCalendarService\n        .generateYear(this.componentConfig, this.currentDateView, this.selected);\n      this.inputValueType = this.utilsService.getInputType(this.inputValue, this.componentConfig.allowMultiSelect);\n    } else {\n      this.selected = [];\n      this.yearMonths = this.monthCalendarService\n        .generateYear(this.componentConfig, this.currentDateView, this.selected);\n    }\n\n    this.cd.markForCheck();\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChangeCallback = fn;\n  }\n\n  onChangeCallback(_: any) {\n  };\n\n  registerOnTouched(fn: any): void {\n  }\n\n  validate(formControl: FormControl): ValidationErrors | any {\n    if (this.minDate || this.maxDate) {\n      return this.validateFn(formControl.value);\n    } else {\n      return () => null;\n    }\n  }\n\n  processOnChangeCallback(value: Moment[]): CalendarValue {\n    return this.utilsService.convertFromMomentArray(\n      this.componentConfig.format,\n      value,\n      this.componentConfig.returnedValueType || this.inputValueType\n    );\n  }\n\n  initValidators() {\n    this.validateFn = this.validateFn = this.utilsService.createValidator(\n      {minDate: this.minDate, maxDate: this.maxDate},\n      this.componentConfig.format,\n      'month'\n    );\n\n    this.onChangeCallback(this.processOnChangeCallback(this.selected));\n  }\n\n  monthClicked(month: IMonth) {\n    if (month.selected && !this.componentConfig.unSelectOnClick) {\n      return;\n    }\n\n    this.selected = this.utilsService\n      .updateSelected(this.componentConfig.allowMultiSelect, this.selected, month, 'month');\n    this.yearMonths = this.monthCalendarService\n      .generateYear(this.componentConfig, this.currentDateView, this.selected);\n    this.onSelect.emit(month);\n  }\n\n  onLeftNavClick() {\n    const from = this.currentDateView.clone();\n    this.currentDateView = this.currentDateView.clone().subtract(1, 'year');\n    const to = this.currentDateView.clone();\n    this.yearMonths = this.monthCalendarService.generateYear(this.componentConfig, this.currentDateView, this.selected);\n    this.onLeftNav.emit({from, to});\n  }\n\n  onLeftSecondaryNavClick() {\n    let navigateBy = this.componentConfig.multipleYearsNavigateBy;\n    const isOutsideRange = this.componentConfig.min &&\n      this.currentDateView.year() - this.componentConfig.min.year() < navigateBy;\n\n    if (isOutsideRange) {\n      navigateBy = this.currentDateView.year() - this.componentConfig.min.year();\n    }\n\n    const from = this.currentDateView.clone();\n    this.currentDateView = this.currentDateView.clone().subtract(navigateBy, 'year');\n    const to = this.currentDateView.clone();\n    this.onLeftSecondaryNav.emit({from, to});\n  }\n\n  onRightNavClick() {\n    const from = this.currentDateView.clone();\n    this.currentDateView = this.currentDateView.clone().add(1, 'year');\n    const to = this.currentDateView.clone();\n    this.onRightNav.emit({from, to});\n  }\n\n  onRightSecondaryNavClick() {\n    let navigateBy = this.componentConfig.multipleYearsNavigateBy;\n    const isOutsideRange = this.componentConfig.max &&\n      this.componentConfig.max.year() - this.currentDateView.year() < navigateBy;\n\n    if (isOutsideRange) {\n      navigateBy = this.componentConfig.max.year() - this.currentDateView.year();\n    }\n\n    const from = this.currentDateView.clone();\n    this.currentDateView = this.currentDateView.clone().add(navigateBy, 'year');\n    const to = this.currentDateView.clone();\n    this.onRightSecondaryNav.emit({from, to});\n  }\n\n  toggleCalendarMode() {\n    this.onNavHeaderBtnClick.emit();\n  }\n\n  getMonthBtnCssClass(month: IMonth): {[klass: string]: boolean} {\n    const cssClass: {[klass: string]: boolean} = {\n      'dp-selected': month.selected,\n      'dp-current-month': month.currentMonth\n    };\n    const customCssClass: string = this.monthCalendarService.getMonthBtnCssClass(this.componentConfig, month.date);\n\n    if (customCssClass) {\n      cssClass[customCssClass] = true;\n    }\n\n    return cssClass;\n  }\n\n  shouldShowCurrent(): boolean {\n    return this.utilsService.shouldShowCurrent(\n      this.componentConfig.showGoToCurrent,\n      'month',\n      this.componentConfig.min,\n      this.componentConfig.max\n    );\n  }\n\n  goToCurrent() {\n    this.currentDateView = moment();\n    this.onGoToCurrent.emit();\n  }\n\n  moveCalendarTo(to: SingleCalendarValue) {\n    if (to) {\n      this.currentDateView = this.utilsService.convertToMoment(to, this.componentConfig.format);\n      this.cd.markForCheck();\n    }\n  }\n\n  handleConfigChange(config: SimpleChange) {\n    if (config) {\n      const prevConf: IMonthCalendarConfigInternal = this.monthCalendarService.getConfig(config.previousValue);\n      const currentConf: IMonthCalendarConfigInternal = this.monthCalendarService.getConfig(config.currentValue);\n\n      if (this.utilsService.shouldResetCurrentView(prevConf, currentConf)) {\n        this._currentDateView = null;\n      }\n    }\n  }\n}\n","import {ECalendarValue} from '../common/types/calendar-value-enum';\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport {Moment} from 'moment';\nimport {CalendarValue} from '../common/types/calendar-value';\nimport {UtilsService} from '../common/services/utils/utils.service';\nimport {IDate} from '../common/models/date.model';\nimport {DayCalendarService} from '../day-calendar/day-calendar.service';\nimport {TimeSelectService} from '../time-select/time-select.service';\nimport {IDayTimeCalendarConfig} from './day-time-calendar-config.model';\nimport {DayTimeCalendarService} from './day-time-calendar.service';\nimport {DateValidator} from '../common/types/validator.type';\nimport {DayCalendarComponent} from '../day-calendar/day-calendar.component';\nimport {INavEvent} from '../common/models/navigation-event.model';\n\n@Component({\n  selector: 'dp-day-time-calendar',\n  templateUrl: 'day-time-calendar.component.html',\n  styleUrls: ['day-time-calendar.component.less'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    DayTimeCalendarService,\n    DayCalendarService,\n    TimeSelectService,\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DayTimeCalendarComponent),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => DayTimeCalendarComponent),\n      multi: true\n    }\n  ]\n})\nexport class DayTimeCalendarComponent implements OnInit, OnChanges, ControlValueAccessor, Validator {\n\n  @Input() config: IDayTimeCalendarConfig;\n  @Input() displayDate: SingleCalendarValue;\n  @Input() minDate: SingleCalendarValue;\n  @Input() maxDate: SingleCalendarValue;\n  @HostBinding('class') @Input() theme: string;\n\n  @Output() onChange: EventEmitter<IDate> = new EventEmitter();\n  @Output() onGoToCurrent: EventEmitter<void> = new EventEmitter();\n  @Output() onLeftNav: EventEmitter<INavEvent> = new EventEmitter();\n  @Output() onRightNav: EventEmitter<INavEvent> = new EventEmitter();\n\n  @ViewChild('dayCalendar', {static: false}) dayCalendarRef: DayCalendarComponent;\n\n  isInited: boolean = false;\n  componentConfig: IDayTimeCalendarConfig;\n  _selected: Moment;\n  inputValue: CalendarValue;\n  inputValueType: ECalendarValue;\n  validateFn: DateValidator;\n\n  set selected(selected: Moment) {\n    this._selected = selected;\n    this.onChangeCallback(this.processOnChangeCallback(selected));\n  }\n\n  get selected(): Moment {\n    return this._selected;\n  }\n\n  api = {\n    moveCalendarTo: this.moveCalendarTo.bind(this)\n  };\n\n  constructor(public dayTimeCalendarService: DayTimeCalendarService,\n              public utilsService: UtilsService,\n              public cd: ChangeDetectorRef) {\n  }\n\n  ngOnInit() {\n    this.isInited = true;\n    this.init();\n    this.initValidators();\n  }\n\n  init() {\n    this.componentConfig = this.dayTimeCalendarService.getConfig(this.config);\n    this.inputValueType = this.utilsService.getInputType(this.inputValue, false);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (this.isInited) {\n      const {minDate, maxDate} = changes;\n      this.init();\n\n      if (minDate || maxDate) {\n        this.initValidators();\n      }\n    }\n  }\n\n  writeValue(value: CalendarValue): void {\n    this.inputValue = value;\n\n    if (value) {\n      this.selected = this.utilsService\n        .convertToMomentArray(value, this.componentConfig.format, false)[0];\n      this.inputValueType = this.utilsService\n        .getInputType(this.inputValue, false);\n    } else {\n      this.selected = null;\n    }\n\n    this.cd.markForCheck();\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChangeCallback = fn;\n  }\n\n  onChangeCallback(_: any) {\n  };\n\n  registerOnTouched(fn: any): void {\n  }\n\n  validate(formControl: FormControl): ValidationErrors | any {\n    if (this.minDate || this.maxDate) {\n      return this.validateFn(formControl.value);\n    } else {\n      return () => null;\n    }\n  }\n\n  processOnChangeCallback(value: Moment): CalendarValue {\n    return this.utilsService.convertFromMomentArray(\n      this.componentConfig.format,\n      [value],\n      this.componentConfig.returnedValueType || this.inputValueType\n    );\n  }\n\n  initValidators() {\n    this.validateFn = this.utilsService.createValidator(\n      {\n        minDate: this.minDate,\n        maxDate: this.maxDate\n      }, undefined, 'daytime');\n\n    this.onChangeCallback(this.processOnChangeCallback(this.selected));\n  }\n\n  dateSelected(day: IDate) {\n    this.selected = this.dayTimeCalendarService.updateDay(this.selected, day.date, this.config);\n    this.emitChange();\n  }\n\n  timeChange(time: IDate) {\n    this.selected = this.dayTimeCalendarService.updateTime(this.selected, time.date);\n    this.emitChange();\n  }\n\n  emitChange() {\n    this.onChange.emit({date: this.selected, selected: false});\n  }\n\n  moveCalendarTo(to: SingleCalendarValue) {\n    if (to) {\n      this.dayCalendarRef.moveCalendarTo(to);\n    }\n  }\n\n  onLeftNavClick(change: INavEvent) {\n    this.onLeftNav.emit(change);\n  }\n\n  onRightNavClick(change: INavEvent) {\n    this.onRightNav.emit(change);\n  }\n}\n","import {IDate} from '../common/models/date.model';\nimport {DomHelper} from '../common/services/dom-appender/dom-appender.service';\nimport {UtilsService} from '../common/services/utils/utils.service';\nimport {CalendarMode} from '../common/types/calendar-mode';\nimport {ECalendarMode} from '../common/types/calendar-mode-enum';\nimport {CalendarValue} from '../common/types/calendar-value';\nimport {ECalendarValue} from '../common/types/calendar-value-enum';\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\nimport {IDayCalendarConfig} from '../day-calendar/day-calendar-config.model';\nimport {DayCalendarComponent} from '../day-calendar/day-calendar.component';\nimport {DayCalendarService} from '../day-calendar/day-calendar.service';\nimport {IDayTimeCalendarConfig} from '../day-time-calendar/day-time-calendar-config.model';\nimport {DayTimeCalendarService} from '../day-time-calendar/day-time-calendar.service';\nimport {ITimeSelectConfig} from '../time-select/time-select-config.model';\nimport {TimeSelectComponent} from '../time-select/time-select.component';\nimport {TimeSelectService} from '../time-select/time-select.service';\nimport {IDatePickerConfig, IDatePickerConfigInternal} from './date-picker-config.model';\nimport {IDpDayPickerApi} from './date-picker.api';\nimport {DatePickerService} from './date-picker.service';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport {Moment, unitOfTime} from 'moment';\nimport {DateValidator} from '../common/types/validator.type';\nimport {MonthCalendarComponent} from '../month-calendar/month-calendar.component';\nimport {DayTimeCalendarComponent} from '../day-time-calendar/day-time-calendar.component';\nimport {INavEvent} from '../common/models/navigation-event.model';\nimport {SelectEvent} from '../common/types/selection-evet.enum.';\nimport {ISelectionEvent} from '../common/types/selection-evet.model';\n\n@Component({\n  selector: 'dp-date-picker',\n  templateUrl: 'date-picker.component.html',\n  styleUrls: ['date-picker.component.less'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    DatePickerService,\n    DayTimeCalendarService,\n    DayCalendarService,\n    TimeSelectService,\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DatePickerComponent),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => DatePickerComponent),\n      multi: true\n    }\n  ]\n})\nexport class DatePickerComponent implements OnChanges,\n                                            OnInit,\n                                            AfterViewInit,\n                                            ControlValueAccessor,\n                                            Validator,\n                                            OnDestroy {\n  isInitialized: boolean = false;\n  @Input() config: IDatePickerConfig;\n  @Input() mode: CalendarMode = 'day';\n  @Input() placeholder: string = '';\n  @Input() disabled: boolean = false;\n  @Input() displayDate: SingleCalendarValue;\n  @HostBinding('class') @Input() theme: string;\n  @Input() minDate: SingleCalendarValue;\n  @Input() maxDate: SingleCalendarValue;\n  @Input() minTime: SingleCalendarValue;\n  @Input() maxTime: SingleCalendarValue;\n\n  @Output() open = new EventEmitter<void>();\n  @Output() close = new EventEmitter<void>();\n  @Output() onChange = new EventEmitter<CalendarValue>();\n  @Output() onGoToCurrent: EventEmitter<void> = new EventEmitter();\n  @Output() onLeftNav: EventEmitter<INavEvent> = new EventEmitter();\n  @Output() onRightNav: EventEmitter<INavEvent> = new EventEmitter();\n  @Output() onSelect: EventEmitter<ISelectionEvent> = new EventEmitter();\n\n  @ViewChild('container', {static: false}) calendarContainer: ElementRef;\n  @ViewChild('dayCalendar', {static: false}) dayCalendarRef: DayCalendarComponent;\n  @ViewChild('monthCalendar', {static: false}) monthCalendarRef: MonthCalendarComponent;\n  @ViewChild('daytimeCalendar', {static: false}) dayTimeCalendarRef: DayTimeCalendarComponent;\n  @ViewChild('timeSelect', {static: false}) timeSelectRef: TimeSelectComponent;\n\n  componentConfig: IDatePickerConfigInternal;\n  dayCalendarConfig: IDayCalendarConfig;\n  dayTimeCalendarConfig: IDayTimeCalendarConfig;\n  timeSelectConfig: ITimeSelectConfig;\n  _areCalendarsShown: boolean = false;\n  hideStateHelper: boolean = false;\n  _selected: Moment[] = [];\n  inputValue: CalendarValue;\n  isFocusedTrigger: boolean = false;\n  _currentDateView: Moment;\n  inputElementValue: string;\n  calendarWrapper: HTMLElement;\n  appendToElement: HTMLElement;\n  inputElementContainer: HTMLElement;\n  popupElem: HTMLElement;\n  handleInnerElementClickUnlisteners: Function[] = [];\n  globalListenersUnlisteners: Function[] = [];\n  validateFn: DateValidator;\n  api: IDpDayPickerApi = {\n    open: this.showCalendars.bind(this),\n    close: this.hideCalendar.bind(this),\n    moveCalendarTo: this.moveCalendarTo.bind(this)\n  };\n  selectEvent = SelectEvent;\n\n  set selected(selected: Moment[]) {\n    this._selected = selected;\n    this.inputElementValue = (<string[]>this.utilsService\n                                            .convertFromMomentArray(this.componentConfig.format, selected, ECalendarValue.StringArr))\n      .join(' | ');\n    const val = this.processOnChangeCallback(selected);\n    this.onChangeCallback(val, false);\n    this.onChange.emit(val);\n  }\n\n  get selected(): Moment[] {\n    return this._selected;\n  }\n\n  get areCalendarsShown(): boolean {\n    return this._areCalendarsShown;\n  }\n\n  get openOnFocus(): boolean {\n    return this.componentConfig.openOnFocus;\n  }\n\n  get openOnClick(): boolean {\n    return this.componentConfig.openOnClick;\n  }\n\n  set areCalendarsShown(value: boolean) {\n    if (value) {\n      this.startGlobalListeners();\n      this.domHelper.appendElementToPosition({\n        container: this.appendToElement,\n        element: this.calendarWrapper,\n        anchor: this.inputElementContainer,\n        dimElem: this.popupElem,\n        drops: this.componentConfig.drops,\n        opens: this.componentConfig.opens\n      });\n    } else {\n      this.stopGlobalListeners();\n      this.dayPickerService.pickerClosed();\n    }\n\n    this._areCalendarsShown = value;\n  }\n\n  get currentDateView(): Moment {\n    return this._currentDateView;\n  }\n\n  set currentDateView(date: Moment) {\n    this._currentDateView = date;\n\n    if (this.dayCalendarRef) {\n      this.dayCalendarRef.moveCalendarTo(date);\n    }\n\n    if (this.monthCalendarRef) {\n      this.monthCalendarRef.moveCalendarTo(date);\n    }\n\n    if (this.dayTimeCalendarRef) {\n      this.dayTimeCalendarRef.moveCalendarTo(date);\n    }\n  }\n\n  constructor(private readonly dayPickerService: DatePickerService,\n              private readonly domHelper: DomHelper,\n              private readonly elemRef: ElementRef,\n              private readonly renderer: Renderer,\n              private readonly utilsService: UtilsService,\n              public readonly cd: ChangeDetectorRef) {\n  }\n\n  @HostListener('click')\n  onClick() {\n    if (!this.openOnClick) {\n      return;\n    }\n\n    if (!this.isFocusedTrigger && !this.disabled) {\n      this.hideStateHelper = true;\n      if (!this.areCalendarsShown) {\n        this.showCalendars();\n      }\n    }\n  }\n\n  onBodyClick() {\n    if (this.componentConfig.hideOnOutsideClick) {\n      if (!this.hideStateHelper && this.areCalendarsShown) {\n        this.hideCalendar();\n      }\n\n      this.hideStateHelper = false;\n    }\n  }\n\n  @HostListener('window:resize')\n  onScroll() {\n    if (this.areCalendarsShown) {\n      this.domHelper.setElementPosition({\n        container: this.appendToElement,\n        element: this.calendarWrapper,\n        anchor: this.inputElementContainer,\n        dimElem: this.popupElem,\n        drops: this.componentConfig.drops,\n        opens: this.componentConfig.opens\n      });\n    }\n  }\n\n  writeValue(value: CalendarValue): void {\n    this.inputValue = value;\n\n    if (value || value === '') {\n      this.selected = this.utilsService\n                          .convertToMomentArray(value, this.componentConfig.format, this.componentConfig.allowMultiSelect);\n      this.init();\n    } else {\n      this.selected = [];\n    }\n\n    this.cd.markForCheck();\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChangeCallback = fn;\n  }\n\n  onChangeCallback(_: any, changedByInput: boolean) {\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouchedCallback = fn;\n  }\n\n  onTouchedCallback() {\n\n  }\n\n  validate(formControl: FormControl): ValidationErrors {\n    return this.validateFn(formControl.value);\n  }\n\n  processOnChangeCallback(selected: Moment[] | string): CalendarValue {\n    if (typeof selected === 'string') {\n      return selected;\n    } else {\n      return this.utilsService.convertFromMomentArray(\n        this.componentConfig.format,\n        selected,\n        this.componentConfig.returnedValueType || this.utilsService.getInputType(this.inputValue, this.componentConfig.allowMultiSelect)\n      );\n    }\n  }\n\n  initValidators(): void {\n    this.validateFn = this.utilsService.createValidator(\n      {\n        minDate: this.minDate,\n        maxDate: this.maxDate,\n        minTime: this.minTime,\n        maxTime: this.maxTime\n      }, this.componentConfig.format, this.mode);\n    this.onChangeCallback(this.processOnChangeCallback(this.selected), false);\n  }\n\n  ngOnInit(): void {\n    this.isInitialized = true;\n    this.init();\n    this.initValidators();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.isInitialized) {\n      const {minDate, maxDate, minTime, maxTime} = changes;\n\n      this.init();\n\n      if (minDate || maxDate || minTime || maxTime) {\n        this.initValidators();\n      }\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.setElementPositionInDom();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  setElementPositionInDom(): void {\n    this.calendarWrapper = <HTMLElement> this.calendarContainer.nativeElement;\n    this.setInputElementContainer();\n    this.popupElem = this.elemRef.nativeElement.querySelector('.dp-popup');\n    this.handleInnerElementClick(this.popupElem);\n\n    const {appendTo} = this.componentConfig;\n    if (appendTo) {\n      if (typeof appendTo === 'string') {\n        this.appendToElement = <HTMLElement>document.querySelector(<string>appendTo);\n      } else {\n        this.appendToElement = <HTMLElement>appendTo;\n      }\n    } else {\n      this.appendToElement = this.elemRef.nativeElement;\n    }\n\n    this.appendToElement.appendChild(this.calendarWrapper);\n  }\n\n  setInputElementContainer() {\n    this.inputElementContainer = this.utilsService.getNativeElement(this.componentConfig.inputElementContainer)\n      || this.elemRef.nativeElement.querySelector('.dp-input-container')\n      || document.body;\n  }\n\n  handleInnerElementClick(element: HTMLElement) {\n    this.handleInnerElementClickUnlisteners.push(\n      this.renderer.listen(element, 'click', () => {\n        this.hideStateHelper = true;\n      })\n    );\n  }\n\n  init() {\n    this.componentConfig = this.dayPickerService.getConfig(this.config, this.mode);\n    this.currentDateView = this.displayDate\n      ? this.utilsService.convertToMoment(this.displayDate, this.componentConfig.format).clone()\n      : this.utilsService\n            .getDefaultDisplayDate(\n              this.currentDateView,\n              this.selected,\n              this.componentConfig.allowMultiSelect,\n              this.componentConfig.min\n            );\n    this.dayCalendarConfig = this.dayPickerService.getDayConfigService(this.componentConfig);\n    this.dayTimeCalendarConfig = this.dayPickerService.getDayTimeConfigService(this.componentConfig);\n    this.timeSelectConfig = this.dayPickerService.getTimeConfigService(this.componentConfig);\n  }\n\n  inputFocused() {\n    if (!this.openOnFocus) {\n      return;\n    }\n\n    this.isFocusedTrigger = true;\n    setTimeout(() => {\n      if (!this.areCalendarsShown) {\n        this.showCalendars();\n      }\n\n      this.hideStateHelper = false;\n\n      this.isFocusedTrigger = false;\n      this.cd.markForCheck();\n    }, this.componentConfig.onOpenDelay);\n  }\n\n  inputBlurred() {\n    this.onTouchedCallback();\n  }\n\n  showCalendars() {\n    this.hideStateHelper = true;\n    this.areCalendarsShown = true;\n\n    if (this.timeSelectRef) {\n      this.timeSelectRef.api.triggerChange();\n    }\n\n    this.open.emit();\n    this.cd.markForCheck();\n  }\n\n  hideCalendar() {\n    this.areCalendarsShown = false;\n\n    if (this.dayCalendarRef) {\n      this.dayCalendarRef.api.toggleCalendarMode(ECalendarMode.Day);\n    }\n\n    this.close.emit();\n    this.cd.markForCheck();\n  }\n\n  onViewDateChange(value: CalendarValue) {\n    const strVal = value ? this.utilsService.convertToString(value, this.componentConfig.format) : '';\n    if (this.dayPickerService.isValidInputDateValue(strVal, this.componentConfig)) {\n      this.selected = this.dayPickerService.convertInputValueToMomentArray(strVal, this.componentConfig);\n      this.currentDateView = this.selected.length\n        ? this.utilsService.getDefaultDisplayDate(\n          null,\n          this.selected,\n          this.componentConfig.allowMultiSelect,\n          this.componentConfig.min\n        )\n        : this.currentDateView;\n\n      this.onSelect.emit({\n        date: strVal,\n        type: SelectEvent.INPUT,\n        granularity: null\n      })\n    } else {\n      this._selected = this.utilsService\n                           .getValidMomentArray(strVal, this.componentConfig.format);\n      this.onChangeCallback(this.processOnChangeCallback(strVal), true);\n    }\n  }\n\n  dateSelected(date: IDate, granularity: unitOfTime.Base, type: SelectEvent, ignoreClose?: boolean) {\n    this.selected = this.utilsService\n                        .updateSelected(this.componentConfig.allowMultiSelect, this.selected, date, granularity);\n    if (!ignoreClose) {\n      this.onDateClick();\n    }\n\n    this.onSelect.emit({\n      date: date.date,\n      granularity,\n      type\n    });\n  }\n\n  onDateClick() {\n    if (this.componentConfig.closeOnSelect) {\n      setTimeout(this.hideCalendar.bind(this), this.componentConfig.closeOnSelectDelay);\n    }\n  }\n\n  onKeyPress(event: KeyboardEvent) {\n    switch (event.keyCode) {\n      case (9):\n      case (27):\n        this.hideCalendar();\n        break;\n    }\n  }\n\n  moveCalendarTo(date: SingleCalendarValue) {\n    const momentDate = this.utilsService.convertToMoment(date, this.componentConfig.format);\n    this.currentDateView = momentDate;\n  }\n\n  onLeftNavClick(change: INavEvent) {\n    this.onLeftNav.emit(change);\n  }\n\n  onRightNavClick(change: INavEvent) {\n    this.onRightNav.emit(change);\n  }\n\n  startGlobalListeners() {\n    this.globalListenersUnlisteners.push(\n      this.renderer.listen(document, 'keydown', (e: KeyboardEvent) => {\n        this.onKeyPress(e);\n      }),\n      this.renderer.listen(document, 'scroll', () => {\n        this.onScroll();\n      }),\n      this.renderer.listen(document, 'click', () => {\n        this.onBodyClick();\n      })\n    );\n  }\n\n  stopGlobalListeners() {\n    this.globalListenersUnlisteners.forEach((ul) => ul());\n    this.globalListenersUnlisteners = [];\n  }\n\n  ngOnDestroy() {\n    this.handleInnerElementClickUnlisteners.forEach(ul => ul());\n\n    if (this.appendToElement) {\n      this.appendToElement.removeChild(this.calendarWrapper);\n    }\n  }\n}\n","import {UtilsService} from '../common/services/utils/utils.service';\nimport {IDatePickerDirectiveConfig} from './date-picker-directive-config.model';\nimport {ElementRef, Injectable} from '@angular/core';\n\n@Injectable()\nexport class DatePickerDirectiveService {\n  constructor(public utilsService: UtilsService) {\n  }\n\n  convertToHTMLElement(attachTo: ElementRef | string, baseElement: HTMLElement): HTMLElement {\n    if (typeof attachTo === 'string') {\n      return this.utilsService.closestParent(baseElement, attachTo);\n    } else if (attachTo) {\n      return attachTo.nativeElement;\n    }\n\n    return undefined;\n  }\n\n  getConfig(config: IDatePickerDirectiveConfig = {},\n            baseElement?: ElementRef,\n            attachTo?: ElementRef | string): IDatePickerDirectiveConfig {\n    const _config: IDatePickerDirectiveConfig = {...config};\n    _config.hideInputContainer = true;\n\n    let native;\n\n    if (config.inputElementContainer) {\n      native = this.utilsService.getNativeElement(config.inputElementContainer);\n    } else {\n      native = baseElement ? baseElement.nativeElement : null;\n    }\n\n    if (native) {\n      _config.inputElementContainer = attachTo\n        ? this.convertToHTMLElement(attachTo, native)\n        : native;\n    }\n\n    return _config;\n  }\n}\n","import {CalendarMode} from '../common/types/calendar-mode';\nimport {IDatePickerDirectiveConfig} from './date-picker-directive-config.model';\nimport {DatePickerDirectiveService} from './date-picker-directive.service';\nimport {IDpDayPickerApi} from './date-picker.api';\nimport {DatePickerComponent} from './date-picker.component';\nimport {\n  ComponentFactoryResolver,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnInit,\n  Optional,\n  Output,\n  ViewContainerRef\n} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {CalendarValue} from '../common/types/calendar-value';\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\nimport {INavEvent} from '../common/models/navigation-event.model';\nimport {UtilsService} from '../common/services/utils/utils.service'\nimport {ISelectionEvent} from '../common/types/selection-evet.model';\n\n@Directive({\n  exportAs: 'dpDayPicker',\n  providers: [DatePickerDirectiveService],\n  selector: '[dpDayPicker]'\n})\nexport class DatePickerDirective implements OnInit {\n  private _config: IDatePickerDirectiveConfig;\n  private _attachTo: ElementRef | string;\n  private _theme: string;\n  private _mode: CalendarMode = 'day';\n  private _minDate: SingleCalendarValue;\n  private _maxDate: SingleCalendarValue;\n  private _minTime: SingleCalendarValue;\n  private _maxTime: SingleCalendarValue;\n  private _displayDate: SingleCalendarValue;\n\n  get config(): IDatePickerDirectiveConfig {\n    return this._config;\n  }\n\n  @Input('dpDayPicker') set config(config: IDatePickerDirectiveConfig) {\n    this._config = this.service.getConfig(config, this.viewContainerRef.element, this.attachTo);\n    this.updateDatepickerConfig();\n    this.markForCheck();\n  }\n\n  get attachTo(): ElementRef | string {\n    return this._attachTo;\n  }\n\n  @Input() set attachTo(attachTo: ElementRef | string) {\n    this._attachTo = attachTo;\n    this._config = this.service.getConfig(this.config, this.viewContainerRef.element, this.attachTo);\n    this.updateDatepickerConfig();\n    this.markForCheck();\n  }\n\n  get theme(): string {\n    return this._theme;\n  }\n\n  @Input() set theme(theme: string) {\n    this._theme = theme;\n    if (this.datePicker) {\n      this.datePicker.theme = theme;\n    }\n\n    this.markForCheck();\n  }\n\n  get mode(): CalendarMode {\n    return this._mode;\n  }\n\n  @Input() set mode(mode: CalendarMode) {\n    this._mode = mode;\n    if (this.datePicker) {\n      this.datePicker.mode = mode;\n    }\n\n    this.markForCheck();\n  }\n\n  @Input() set minDate(minDate: SingleCalendarValue) {\n    this._minDate = minDate;\n    if (this.datePicker) {\n      this.datePicker.minDate = minDate;\n      this.datePicker.ngOnInit();\n    }\n\n    this.markForCheck();\n  }\n\n  get minDate(): SingleCalendarValue {\n    return this._minDate;\n  }\n\n  @Input() set maxDate(maxDate: SingleCalendarValue) {\n    this._maxDate = maxDate;\n    if (this.datePicker) {\n      this.datePicker.maxDate = maxDate;\n      this.datePicker.ngOnInit();\n    }\n\n    this.markForCheck();\n  }\n\n  get maxDate(): SingleCalendarValue {\n    return this._maxDate;\n  }\n\n  @Input() set minTime(minTime: SingleCalendarValue) {\n    this._minTime = minTime;\n    if (this.datePicker) {\n      this.datePicker.minTime = minTime;\n      this.datePicker.ngOnInit();\n    }\n\n    this.markForCheck();\n  }\n\n  get minTime(): SingleCalendarValue {\n    return this._minTime;\n  }\n\n  @Input() set maxTime(maxTime: SingleCalendarValue) {\n    this._maxTime = maxTime;\n    if (this.datePicker) {\n      this.datePicker.maxTime = maxTime;\n      this.datePicker.ngOnInit();\n    }\n\n    this.markForCheck();\n  }\n\n  get maxTime(): SingleCalendarValue {\n    return this._maxTime;\n  }\n\n  get displayDate(): SingleCalendarValue {\n    return this._displayDate;\n  }\n\n  @Input() set displayDate(displayDate: SingleCalendarValue) {\n    this._displayDate = displayDate;\n    this.updateDatepickerConfig();\n\n    this.markForCheck();\n  }\n\n  @Output() open = new EventEmitter<void>();\n  @Output() close = new EventEmitter<void>();\n  @Output() onChange = new EventEmitter<CalendarValue>();\n  @Output() onGoToCurrent: EventEmitter<void> = new EventEmitter();\n  @Output() onLeftNav: EventEmitter<INavEvent> = new EventEmitter();\n  @Output() onRightNav: EventEmitter<INavEvent> = new EventEmitter();\n  @Output() onSelect: EventEmitter<ISelectionEvent> = new EventEmitter();\n\n  public datePicker: DatePickerComponent;\n  public api: IDpDayPickerApi;\n\n  constructor(public viewContainerRef: ViewContainerRef,\n              public elemRef: ElementRef,\n              public componentFactoryResolver: ComponentFactoryResolver,\n              public service: DatePickerDirectiveService,\n              @Optional() public formControl: NgControl,\n              public utilsService: UtilsService) {\n  }\n\n  ngOnInit(): void {\n    this.datePicker = this.createDatePicker();\n    this.api = this.datePicker.api;\n    this.updateDatepickerConfig();\n    this.attachModelToDatePicker();\n    this.datePicker.theme = this.theme;\n  }\n\n  createDatePicker(): DatePickerComponent {\n    const factory = this.componentFactoryResolver.resolveComponentFactory(DatePickerComponent);\n    return this.viewContainerRef.createComponent(factory).instance;\n  }\n\n  attachModelToDatePicker() {\n    if (!this.formControl) {\n      return;\n    }\n\n    this.datePicker.onViewDateChange(this.formControl.value);\n\n    this.formControl.valueChanges.subscribe((value) => {\n      if (value !== this.datePicker.inputElementValue) {\n        const strVal = this.utilsService.convertToString(value, this.datePicker.componentConfig.format);\n        this.datePicker.onViewDateChange(strVal);\n      }\n    });\n\n    let setup = true;\n\n    this.datePicker.registerOnChange((value, changedByInput) => {\n      if (value) {\n        const isMultiselectEmpty = setup && Array.isArray(value) && !value.length;\n\n        if (!isMultiselectEmpty && !changedByInput) {\n          this.formControl.control.setValue(this.datePicker.inputElementValue);\n        }\n      }\n\n      const errors = this.datePicker.validateFn(value);\n\n      if (!setup) {\n        this.formControl.control.markAsDirty({\n          onlySelf: true\n        });\n      } else {\n        setup = false;\n      }\n\n      if (errors) {\n        if (errors.hasOwnProperty('format')) {\n          const {given} = errors['format'];\n          this.datePicker.inputElementValue = given;\n          if (!changedByInput) {\n            this.formControl.control.setValue(given);\n          }\n        }\n\n        this.formControl.control.setErrors(errors);\n      }\n    });\n  }\n\n  @HostListener('click')\n  onClick() {\n    this.datePicker.onClick();\n  }\n\n  @HostListener('focus')\n  onFocus() {\n    this.datePicker.inputFocused();\n  }\n\n  private updateDatepickerConfig() {\n    if (this.datePicker) {\n      this.datePicker.minDate = this.minDate;\n      this.datePicker.maxDate = this.maxDate;\n      this.datePicker.minTime = this.minTime;\n      this.datePicker.maxTime = this.maxTime;\n      this.datePicker.mode = this.mode || 'day';\n      this.datePicker.displayDate = this.displayDate;\n      this.datePicker.config = this.config;\n      this.datePicker.open = this.open;\n      this.datePicker.close = this.close;\n      this.datePicker.onChange = this.onChange;\n      this.datePicker.onGoToCurrent = this.onGoToCurrent;\n      this.datePicker.onLeftNav = this.onLeftNav;\n      this.datePicker.onRightNav = this.onRightNav;\n      this.datePicker.onSelect = this.onSelect;\n\n      this.datePicker.init();\n\n      if (this.datePicker.componentConfig.disableKeypress) {\n        this.elemRef.nativeElement.setAttribute('readonly', true);\n      } else {\n        this.elemRef.nativeElement.removeAttribute('readonly');\n      }\n    }\n  }\n\n  markForCheck() {\n    if (this.datePicker) {\n      this.datePicker.cd.markForCheck();\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  HostBinding,\n  Input,\n  Output,\n  ViewEncapsulation\n} from '@angular/core';\n\n@Component({\n  selector: 'dp-calendar-nav',\n  templateUrl: './calendar-nav.component.html',\n  styleUrls: ['./calendar-nav.component.less'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CalendarNavComponent {\n  @Input() label: string;\n  @Input() isLabelClickable: boolean = false;\n  @Input() showLeftNav: boolean = true;\n  @Input() showLeftSecondaryNav: boolean = false;\n  @Input() showRightNav: boolean = true;\n  @Input() showRightSecondaryNav: boolean = false;\n  @Input() leftNavDisabled: boolean = false;\n  @Input() leftSecondaryNavDisabled: boolean = false;\n  @Input() rightNavDisabled: boolean = false;\n  @Input() rightSecondaryNavDisabled: boolean = false;\n  @Input() showGoToCurrent: boolean = true;\n  @HostBinding('class') @Input() theme: string;\n\n  @Output() onLeftNav: EventEmitter<null> = new EventEmitter();\n  @Output() onLeftSecondaryNav: EventEmitter<null> = new EventEmitter();\n  @Output() onRightNav: EventEmitter<null> = new EventEmitter();\n  @Output() onRightSecondaryNav: EventEmitter<null> = new EventEmitter();\n  @Output() onLabelClick: EventEmitter<null> = new EventEmitter();\n  @Output() onGoToCurrent: EventEmitter<null> = new EventEmitter();\n\n  leftNavClicked() {\n    this.onLeftNav.emit();\n  }\n\n  leftSecondaryNavClicked() {\n    this.onLeftSecondaryNav.emit();\n  }\n\n  rightNavClicked() {\n    this.onRightNav.emit();\n  }\n\n  rightSecondaryNavClicked() {\n    this.onRightSecondaryNav.emit();\n  }\n\n  labelClicked() {\n    this.onLabelClick.emit();\n  }\n}\n","import {NgModule} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {CommonModule} from '@angular/common';\nimport {DomHelper} from './common/services/dom-appender/dom-appender.service';\nimport {UtilsService} from './common/services/utils/utils.service';\nimport {DatePickerComponent} from './date-picker/date-picker.component';\nimport {DatePickerDirective} from './date-picker/date-picker.directive';\nimport {DayCalendarComponent} from './day-calendar/day-calendar.component';\nimport {MonthCalendarComponent} from './month-calendar/month-calendar.component';\nimport {TimeSelectComponent} from './time-select/time-select.component';\nimport {CalendarNavComponent} from './calendar-nav/calendar-nav.component';\nimport {DayTimeCalendarComponent} from './day-time-calendar/day-time-calendar.component';\nexport {DatePickerComponent} from './date-picker/date-picker.component';\nexport {DatePickerDirective} from './date-picker/date-picker.directive';\nexport {DayCalendarComponent} from './day-calendar/day-calendar.component';\nexport {DayTimeCalendarComponent} from './day-time-calendar/day-time-calendar.component';\nexport {TimeSelectComponent} from './time-select/time-select.component';\nexport {MonthCalendarComponent} from './month-calendar/month-calendar.component';\n\n@NgModule({\n  providers: [\n    DomHelper,\n    UtilsService\n  ],\n  declarations: [\n    DatePickerComponent,\n    DatePickerDirective,\n    DayCalendarComponent,\n    MonthCalendarComponent,\n    CalendarNavComponent,\n    TimeSelectComponent,\n    DayTimeCalendarComponent\n  ],\n  entryComponents: [\n    DatePickerComponent\n  ],\n  imports: [\n    CommonModule,\n    FormsModule\n  ],\n  exports: [\n    DatePickerComponent,\n    DatePickerDirective,\n    MonthCalendarComponent,\n    DayCalendarComponent,\n    TimeSelectComponent,\n    DayTimeCalendarComponent\n  ]\n})\nexport class DpDatePickerModule {\n}\n"],"names":["ECalendarMode","ECalendarValue","SelectEvent","Injectable","moment","tslib_1.__assign","EventEmitter","tslib_1.__decorate","Input","HostBinding","Output","Component","ViewEncapsulation","ChangeDetectionStrategy","NG_VALUE_ACCESSOR","forwardRef","NG_VALIDATORS","ChangeDetectorRef","ViewChild","ElementRef","HostListener","Renderer","Directive","tslib_1.__param","Optional","ViewContainerRef","ComponentFactoryResolver","NgControl","NgModule","CommonModule","FormsModule"],"mappings":"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"}