mis-crystal-design-system 3.1.2 → 3.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/mis-components/daterangepicker_v2/daterangepicker-constants.ts","../../../projects/mis-components/daterangepicker_v2/utils/index.ts","../../../projects/mis-components/daterangepicker_v2/tz-drp-container/tz-drp-container.component.ts","../../../projects/mis-components/daterangepicker_v2/tz-daterangepicker.directive.ts","../../../projects/mis-components/daterangepicker_v2/daterangepicker.module.ts"],"names":["Object","create","__read","o","n","m","Symbol","iterator","r","e","i","call","ar","next","done","push","value","error","__spread","arguments","length","concat","CONTAINER_DATA","InjectionToken","DATE_FORMAT","getMonth","index","month","TzDrpContainerComponent","data","toast","_this","this","parseZoneInstance","args","_i","parseZone","apply","rawWeekDays","weekDays","currentMonthDates","nextMonthDates","isPreviousMonthDisabled","isNextMonthDisabled","selectionStarted","isDatesValid","localSelectedDates","dates","startDate","endDate","_b","_a","dpConfig","timezone","tz","currentMonthNumber","nextMonthNumber","add","currentMonth","nextMonth","currentYearNumber","year","nextYearNumber","map","day","label","slice","toLowerCase","isCurrentDay","_d","_c","format","assign","prototype","ngOnInit","currentDateInstance","calculateMinMaxDays","generateDates","selectedStartDate","isValid","get","currentInstance","minDate","isSameOrAfter","maxDate","isSameOrBefore","navigateMonth","direction","thisMonth","subtract","daysInMonth","currentDate","date","this_1","dateString","isDisabledDay","datesDisabled","some","d","isAfter","isBefore","isSelectedStartDay","isAfterSelectedStartDate","isBeforeSelectedEndDate","inRangeDay","_e","isSelectedEndDay","_f","_g","_h","_j","weekDay","toastMessage","_k","messages","find","q","message","unshift","selectDay","from","momentDay","displayMsg","applyDates","dateChange","cancelDatePicker","close","Component","selector","template","Inject","ToastService","TzDaterangepickerDirective","control","element","overlay","viewContainerRef","dateMessages","positionX","positionY","offsetX","offsetY","EventEmitter","isOpen","dpDisabledDates","defineProperty","toggleDatePicker","open","positionStrategy","position","flexibleConnectedTo","withPositions","genPositionPairs","withPush","config","OverlayConfig","hasBackdrop","scrollStrategy","scrollStrategies","reposition","backdropClass","overlayRef","tempRef","ComponentPortal","Injector","providers","provide","useValue","applyDate","bind","attach","backdropClick","pipe","take","subscribe","emit","patchValue","detach","dispose","Directive","NgControl","decorators","type","Self","Optional","ElementRef","Overlay","ViewContainerRef","Input","Output","HostListener","NgModule","declarations","imports","CommonModule","OverlayModule","ToastModule","forRoot","ButtonModule","exports","entryComponents"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\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) : adopt(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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") 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 throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, 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\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @format */\n\nimport { InjectionToken } from \"@angular/core\";\n\nexport const CONTAINER_DATA = new InjectionToken<{}>(\"CONTAINER_DATA\");\nexport const DATE_FORMAT = \"DD-MM-YYYY\";\n","import { ICurrentMonth } from \"../models/drp-config.model\";\n\nexport const getMonth = (index: number): ICurrentMonth => {\n let month;\n switch (index) {\n case 0:\n month = \"January\";\n break;\n case 1:\n month = \"February\";\n break;\n case 2:\n month = \"March\";\n break;\n case 3:\n month = \"April\";\n break;\n case 4:\n month = \"May\";\n break;\n case 5:\n month = \"June\";\n break;\n case 6:\n month = \"July\";\n break;\n case 7:\n month = \"August\";\n break;\n case 8:\n month = \"September\";\n break;\n case 9:\n month = \"October\";\n break;\n case 10:\n month = \"November\";\n break;\n case 11:\n month = \"December\";\n break;\n default:\n break;\n }\n return month;\n};\n","import { Component, Inject, OnInit } from \"@angular/core\";\nimport { CONTAINER_DATA, DATE_FORMAT } from \"../daterangepicker-constants\";\nimport { ICurrentMonth, ICurrentMonthDates, IDatePickerData, IWeekDay, ISelectedDatesConfig } from \"../models/drp-config.model\";\nimport { parseZone, Moment } from \"moment-timezone\";\nimport { getMonth } from \"../utils\";\nimport { ToastService } from \"mis-crystal-design-system/toast\";\n\n@Component({\n selector: \"mis-tz-drp\",\n templateUrl: \"./tz-drp-container.component.html\",\n styleUrls: [\"./tz-drp-container.component.scss\"]\n})\nexport class TzDrpContainerComponent implements OnInit {\n data: IDatePickerData;\n private parseZoneInstance = (...args) => {\n return parseZone(...args);\n };\n private rawWeekDays: string[] = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n weekDays: IWeekDay[] = [];\n currentMonthNumber: number;\n currentMonth: ICurrentMonth;\n currentYearNumber: number;\n currentMonthDates: ICurrentMonthDates[] = [];\n nextMonthNumber: number;\n nextMonth: ICurrentMonth;\n nextYearNumber: number;\n nextMonthDates: ICurrentMonthDates[] = [];\n isPreviousMonthDisabled: boolean = false;\n isNextMonthDisabled: boolean = false;\n selectionStarted = false;\n localSelectedDates: ISelectedDatesConfig;\n isDatesValid = false;\n\n constructor(@Inject(CONTAINER_DATA) data: IDatePickerData, private toast: ToastService) {\n this.data = data;\n this.localSelectedDates = this.data.dates;\n this.isDatesValid = false;\n if (this.localSelectedDates.startDate && this.localSelectedDates.endDate) {\n this.isDatesValid = true;\n }\n if (this.data?.dpConfig?.timezone) {\n this.parseZoneInstance = (...args) => {\n return parseZone(...args).tz(this.data.dpConfig.timezone);\n };\n }\n this.currentMonthNumber = this.parseZoneInstance().month();\n this.nextMonthNumber = this.parseZoneInstance().add(1, \"month\").month();\n this.currentMonth = getMonth(this.currentMonthNumber);\n this.nextMonth = getMonth(this.nextMonthNumber);\n this.currentYearNumber = this.parseZoneInstance().year();\n this.nextYearNumber = this.parseZoneInstance().add(1, \"month\").year();\n this.weekDays = this.rawWeekDays.map((day, index) => ({\n label: `${day[0]}${day.slice(1).toLowerCase()}`,\n isCurrentDay: this.parseZoneInstance().day() === index\n }));\n if (!this.data?.dpConfig?.format) {\n this.data.dpConfig = {\n ...this.data.dpConfig,\n format: DATE_FORMAT\n };\n }\n }\n\n ngOnInit(): void {\n this.currentDateInstance();\n this.calculateMinMaxDays();\n }\n\n private currentDateInstance(): void {\n if (!this.localSelectedDates?.startDate) {\n this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);\n this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);\n return;\n }\n const selectedStartDate = this.parseZoneInstance(this.localSelectedDates?.startDate, this.data.dpConfig.format);\n if (selectedStartDate.isValid()) {\n this.currentYearNumber = selectedStartDate.year();\n this.nextYearNumber = selectedStartDate.add(1, \"month\").year();\n this.currentMonthNumber = selectedStartDate.get(\"month\") - 1;\n this.nextMonthNumber = selectedStartDate.add(1, \"month\").month() - 1;\n this.currentMonth = getMonth(this.currentMonthNumber);\n this.nextMonth = getMonth(this.nextMonthNumber);\n }\n this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);\n this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);\n }\n\n private calculateMinMaxDays() {\n const currentInstance = this.parseZoneInstance().year(this.currentYearNumber).month(this.currentMonthNumber);\n const minDate = this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format);\n if (minDate.isValid()) {\n this.isPreviousMonthDisabled = minDate.isSameOrAfter(currentInstance, \"month\");\n }\n const maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format);\n if (maxDate.isValid()) {\n this.isNextMonthDisabled = maxDate.isSameOrBefore(currentInstance, \"month\");\n }\n }\n\n navigateMonth(direction: \"NEXT\" | \"PREVIOUS\"): void {\n let thisMonth: Moment = parseZone().year(this.currentYearNumber).month(this.currentMonthNumber);\n if (direction === \"NEXT\") {\n thisMonth = thisMonth.add(1, \"month\");\n } else if (direction === \"PREVIOUS\") {\n thisMonth = thisMonth.subtract(1, \"month\");\n }\n this.currentMonthNumber = thisMonth.month();\n this.nextMonthNumber = thisMonth.add(1, \"month\").month();\n this.currentMonth = getMonth(this.currentMonthNumber);\n this.nextMonth = getMonth(this.nextMonthNumber);\n this.currentYearNumber = thisMonth.year();\n this.nextYearNumber = thisMonth.add(1, \"month\").year();\n this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);\n this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);\n this.calculateMinMaxDays();\n }\n\n private generateDates(month: number, currentYearNumber: number): ICurrentMonthDates[] {\n let dates: ICurrentMonthDates[] = [];\n const daysInMonth = parseZone().year(currentYearNumber).month(month).daysInMonth();\n for (let currentDate = 1; currentDate <= daysInMonth; currentDate++) {\n const date = this.parseZoneInstance().year(currentYearNumber).month(month).date(currentDate);\n const dateString = date.format(this.data.dpConfig.format);\n let isDisabledDay = this.data.datesDisabled.some(d => d === dateString);\n const minDate = this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format);\n if (!isDisabledDay && minDate.isValid()) {\n isDisabledDay = minDate.isAfter(date, \"day\");\n }\n const maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format);\n if (!isDisabledDay && maxDate.isValid()) {\n isDisabledDay = maxDate.isBefore(date, \"day\");\n }\n const isCurrentDay =\n this.parseZoneInstance().year(currentYearNumber).month(month).date(currentDate).format(this.data.dpConfig.format) ===\n this.parseZoneInstance().format(this.data.dpConfig.format);\n const isSelectedStartDay =\n !isDisabledDay &&\n (this.localSelectedDates?.startDate ?? false) &&\n date.format(this.data.dpConfig.format) === this.localSelectedDates?.startDate;\n const isAfterSelectedStartDate = this.parseZoneInstance(date).isAfter(this.localSelectedDates.startDate, \"day\");\n const isBeforeSelectedEndDate = this.parseZoneInstance(date).isBefore(parseZone(this.localSelectedDates.endDate), \"day\");\n const inRangeDay =\n (this.localSelectedDates.startDate ?? false) &&\n (this.localSelectedDates.endDate ?? false) &&\n isAfterSelectedStartDate &&\n isBeforeSelectedEndDate;\n\n const isSelectedEndDay =\n !isDisabledDay &&\n ((this.localSelectedDates?.startDate && this.localSelectedDates?.endDate) ?? false) &&\n date.format(this.data.dpConfig.format) === this.localSelectedDates?.endDate;\n dates.push({\n date: currentDate,\n weekDay: date.day(),\n isCurrentDay,\n isSelectedStartDay,\n isSelectedEndDay,\n inRangeDay,\n toastMessage: this.data.messages.find(q => date.format(this.data.dpConfig.format) === q.date)?.message || \"\",\n isDisabledDay\n });\n }\n for (let i = dates[0].weekDay; i > 0; i--) {\n dates.unshift({ date: 0, weekDay: i - 1 });\n }\n return dates;\n }\n\n selectDay(from: \"LEFT\" | \"RIGHT\", day: ICurrentMonthDates) {\n if (day.date <= 0) return;\n if (!day.isDisabledDay) {\n if (this.selectionStarted) {\n const momentDay = parseZone()\n .year(from === \"LEFT\" ? this.currentYearNumber : this.nextYearNumber)\n .month(from === \"LEFT\" ? this.currentMonthNumber : this.nextMonthNumber)\n .date(day.date);\n if (momentDay.isBefore(this.localSelectedDates.startDate, \"day\")) {\n this.localSelectedDates = {\n startDate: momentDay.format(this.data.dpConfig.format),\n endDate: null\n };\n this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);\n this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);\n return;\n }\n this.selectionStarted = false;\n this.localSelectedDates = {\n ...this.localSelectedDates,\n endDate: momentDay.format(this.data.dpConfig.format)\n };\n } else {\n this.selectionStarted = true;\n this.localSelectedDates = {\n startDate: parseZone()\n .year(from === \"LEFT\" ? this.currentYearNumber : this.nextYearNumber)\n .month(from === \"LEFT\" ? this.currentMonthNumber : this.nextMonthNumber)\n .date(day.date)\n .format(this.data.dpConfig.format),\n endDate: null\n };\n }\n this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);\n this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);\n this.isDatesValid = false;\n if (this.localSelectedDates.startDate && this.localSelectedDates.endDate) {\n this.isDatesValid = true;\n }\n }\n if (day.toastMessage) {\n this.toast.displayMsg(day.toastMessage, 4000);\n }\n }\n applyDates() {\n this.data.dateChange(this.localSelectedDates);\n }\n cancelDatePicker() {\n this.data.close();\n }\n}\n","import { Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { Directive, ElementRef, EventEmitter, HostListener, Injector, Input, Optional, Output, Self, ViewContainerRef } from \"@angular/core\";\nimport { NgControl } from \"@angular/forms\";\nimport { take } from \"rxjs/operators\";\nimport { genPositionPairs } from \"mis-crystal-design-system/utils\";\nimport { CONTAINER_DATA, DATE_FORMAT } from \"./daterangepicker-constants\";\nimport { IDatePickerConfig, IDatePickerToastText, ISelectedDatesConfig } from \"./models/drp-config.model\";\nimport { TzDrpContainerComponent } from \"./tz-drp-container/tz-drp-container.component\";\n\n@Directive({\n selector: \"input[misTzDrp]\"\n})\nexport class TzDaterangepickerDirective {\n @Input() dpConfig: Partial<IDatePickerConfig> = {\n format: DATE_FORMAT,\n minDate: \"\",\n maxDate: \"\"\n };\n // dd-mm-yyyy 01-12-2022\n @Input() set selectedDates(dates: ISelectedDatesConfig) {\n this.dates = { startDate: null, endDate: null, ...dates };\n }\n @Input() set datesDisabled(dates: string[]) {\n this.dpDisabledDates = dates;\n }\n @Input() dateMessages: IDatePickerToastText[] = [];\n @Input() positionX: \"start\" | \"center\" | \"end\" = \"center\";\n @Input() positionY: \"top\" | \"center\" | \"bottom\" = \"bottom\";\n @Input() offsetX: number = 0;\n @Input() offsetY: number = 0;\n private overlayRef: OverlayRef;\n @Output() dateChange = new EventEmitter<ISelectedDatesConfig>(true);\n private isOpen = false;\n dates: ISelectedDatesConfig;\n\n private dpDisabledDates: string[] = [];\n\n constructor(\n @Self() @Optional() private control: NgControl,\n private element: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef\n ) {}\n\n @HostListener(\"click\")\n toggleDatePicker() {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n private open() {\n this.isOpen = true;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.element)\n .withPositions(\n genPositionPairs(\n {\n positionX: this.positionX,\n positionY: this.positionY,\n offsetX: this.offsetX,\n offsetY: this.offsetY\n },\n true\n )\n )\n .withPush(true);\n const config = new OverlayConfig({\n hasBackdrop: true,\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n backdropClass: \"cdk-overlay-transparent-backdrop\"\n });\n this.overlayRef = this.overlay.create(config);\n const tempRef = new ComponentPortal(\n TzDrpContainerComponent,\n this.viewContainerRef,\n Injector.create({\n providers: [\n {\n provide: CONTAINER_DATA,\n useValue: {\n messages: this.dateMessages,\n dates: this.control?.control.value || this.dates,\n dpConfig: this.dpConfig,\n datesDisabled: this.dpDisabledDates,\n dateChange: this.applyDate.bind(this),\n close: this.close.bind(this)\n }\n }\n ]\n })\n );\n this.overlayRef.attach(tempRef);\n this.overlayRef\n .backdropClick()\n .pipe(take(1))\n .subscribe(() => {\n this.close();\n });\n }\n\n applyDate(dates: ISelectedDatesConfig) {\n this.dateChange.emit(dates);\n this.control?.control.patchValue(dates);\n this.dates = dates;\n this.close();\n }\n\n close() {\n this.isOpen = false;\n this.overlayRef.detach();\n this.overlayRef.dispose();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { TzDrpContainerComponent } from \"./tz-drp-container/tz-drp-container.component\";\nimport { TzDaterangepickerDirective } from \"./tz-daterangepicker.directive\";\nimport { ToastModule } from \"mis-crystal-design-system/toast\";\nimport { ButtonModule } from \"mis-crystal-design-system/button\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\n\n@NgModule({\n declarations: [TzDrpContainerComponent, TzDaterangepickerDirective],\n imports: [CommonModule, OverlayModule, ToastModule.forRoot(), ButtonModule.forRoot()],\n exports: [TzDrpContainerComponent, TzDaterangepickerDirective],\n entryComponents: [TzDrpContainerComponent]\n})\nexport class DateRangepickerModuleV2 {}\n"]}
1
+ {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/mis-components/daterangepicker_v2/daterangepicker-constants.ts","../../../projects/mis-components/daterangepicker_v2/utils/index.ts","../../../projects/mis-components/daterangepicker_v2/tz-drp-container/tz-drp-container.component.ts","../../../projects/mis-components/daterangepicker_v2/tz-daterangepicker.directive.ts","../../../projects/mis-components/daterangepicker_v2/daterangepicker.module.ts"],"names":["Object","create","__read","o","n","m","Symbol","iterator","r","e","i","call","ar","next","done","push","value","error","__spread","arguments","length","concat","CONTAINER_DATA","InjectionToken","DATE_FORMAT","getMonth","index","month","TzDrpContainerComponent","data","toast","_this","this","parseZoneInstance","args","_i","parseZone","apply","rawWeekDays","weekDays","currentMonthDates","nextMonthDates","isPreviousMonthDisabled","isNextMonthDisabled","selectionStarted","isDatesValid","localSelectedDates","dates","startDate","endDate","_b","_a","dpConfig","timezone","tz","currentMonthNumber","nextMonthNumber","add","currentMonth","nextMonth","currentYearNumber","year","nextYearNumber","map","day","label","slice","toLowerCase","isCurrentDay","_d","_c","format","assign","prototype","ngOnInit","currentDateInstance","calculateMinMaxDays","generateDates","selectedStartDate","isValid","get","currentInstance","minDate","isSameOrAfter","maxDate","isSameOrBefore","navigateMonth","direction","thisMonth","subtract","clone","daysInMonth","currentDate","date","this_1","dateString","isDisabledDay","datesDisabled","some","d","isAfter","isBefore","isSelectedStartDay","isAfterSelectedStartDate","isBeforeSelectedEndDate","inRangeDay","_e","isSelectedEndDay","_f","_g","_h","_j","weekDay","toastMessage","_k","messages","find","q","message","unshift","selectDay","from","momentDay","displayMsg","applyDates","dateChange","cancelDatePicker","close","Component","selector","template","Inject","ToastService","TzDaterangepickerDirective","control","element","overlay","viewContainerRef","dateMessages","positionX","positionY","offsetX","offsetY","EventEmitter","isOpen","dpDisabledDates","defineProperty","toggleDatePicker","open","positionStrategy","position","flexibleConnectedTo","withPositions","genPositionPairs","withPush","config","OverlayConfig","hasBackdrop","scrollStrategy","scrollStrategies","reposition","backdropClass","overlayRef","tempRef","ComponentPortal","Injector","providers","provide","useValue","applyDate","bind","attach","backdropClick","pipe","take","subscribe","emit","patchValue","detach","dispose","Directive","NgControl","decorators","type","Self","Optional","ElementRef","Overlay","ViewContainerRef","Input","Output","HostListener","NgModule","declarations","imports","CommonModule","OverlayModule","ToastModule","forRoot","ButtonModule","exports","entryComponents"],"mappings":";;;;;;;;;;;;;;oFA2G6BA,OAAOC,gBAwBpBC,EAAOC,EAAGC,GACtB,IAAIC,EAAsB,mBAAXC,QAAyBH,EAAEG,OAAOC,UACjD,IAAKF,EAAG,OAAOF,EACf,IAAmBK,EAAYC,EAA3BC,EAAIL,EAAEM,KAAKR,GAAOS,EAAK,GAC3B,IACI,WAAc,IAANR,GAAgBA,KAAM,MAAQI,EAAIE,EAAEG,QAAQC,MAAMF,EAAGG,KAAKP,EAAEQ,OAExE,MAAOC,GAASR,EAAI,CAAEQ,MAAOA,WAEzB,IACQT,IAAMA,EAAEM,OAAST,EAAIK,EAAU,SAAIL,EAAEM,KAAKD,WAExC,GAAID,EAAG,MAAMA,EAAEQ,OAE7B,OAAOL,WAIKM,IACZ,IAAK,IAAIN,EAAK,GAAIF,EAAI,EAAGA,EAAIS,UAAUC,OAAQV,IAC3CE,EAAKA,EAAGS,OAAOnB,EAAOiB,UAAUT,KACpC,OAAOE,EAyDcZ,OAAOC,WC7MnBqB,EAAiB,IAAIC,EAAAA,eAAmB,kBACxCC,EAAc,aCHdC,EAAW,SAACC,GACvB,IAAIC,EACJ,OAAQD,GACN,KAAK,EACHC,EAAQ,UACR,MACF,KAAK,EACHA,EAAQ,WACR,MACF,KAAK,EACHA,EAAQ,QACR,MACF,KAAK,EACHA,EAAQ,QACR,MACF,KAAK,EACHA,EAAQ,MACR,MACF,KAAK,EACHA,EAAQ,OACR,MACF,KAAK,EACHA,EAAQ,OACR,MACF,KAAK,EACHA,EAAQ,SACR,MACF,KAAK,EACHA,EAAQ,YACR,MACF,KAAK,EACHA,EAAQ,UACR,MACF,KAAK,GACHA,EAAQ,WACR,MACF,KAAK,GACHA,EAAQ,WAKZ,OAAOA,gBCXP,SAAAC,EAAoCC,EAA+BC,GAAnE,YAAAC,EAAAC,KAAmEA,KAAAF,MAAAA,EAnB3DE,KAAAC,kBAAoB,eAAC,IAAAC,EAAA,GAAAC,EAAA,EAAAA,EAAAhB,UAAAC,OAAAe,IAAAD,EAAAC,GAAAhB,UAAAgB,GAC3B,OAAOC,EAAAA,UAASC,WAAA,EAAAnB,EAAIgB,KAEdF,KAAAM,YAAwB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3EN,KAAAO,SAAuB,GAIvBP,KAAAQ,kBAA0C,GAI1CR,KAAAS,eAAuC,GACvCT,KAAAU,yBAAmC,EACnCV,KAAAW,qBAA+B,EAC/BX,KAAAY,kBAAmB,EAEnBZ,KAAAa,cAAe,EAGbb,KAAKH,KAAOA,EACZG,KAAKc,mBAAqBd,KAAKH,KAAKkB,MACpCf,KAAKa,cAAe,EAChBb,KAAKc,mBAAmBE,WAAahB,KAAKc,mBAAmBG,UAC/DjB,KAAKa,cAAe,IAEC,QAAvBK,EAAa,QAAbC,EAAInB,KAAKH,YAAI,IAAAsB,OAAA,EAAAA,EAAEC,gBAAQ,IAAAF,OAAA,EAAAA,EAAEG,YACvBrB,KAAKC,kBAAoB,eAAC,IAAAC,EAAA,GAAAC,EAAA,EAAAA,EAAAhB,UAAAC,OAAAe,IAAAD,EAAAC,GAAAhB,UAAAgB,GACxB,OAAOC,EAAAA,UAASC,WAAA,EAAAnB,EAAIgB,IAAMoB,GAAGvB,EAAKF,KAAKuB,SAASC,YAGpDrB,KAAKuB,mBAAqBvB,KAAKC,oBAAoBN,QACnDK,KAAKwB,gBAAkBxB,KAAKC,oBAAoBwB,IAAI,EAAG,SAAS9B,QAChEK,KAAK0B,aAAejC,EAASO,KAAKuB,oBAClCvB,KAAK2B,UAAYlC,EAASO,KAAKwB,iBAC/BxB,KAAK4B,kBAAoB5B,KAAKC,oBAAoB4B,OAClD7B,KAAK8B,eAAiB9B,KAAKC,oBAAoBwB,IAAI,EAAG,SAASI,OAC/D7B,KAAKO,SAAWP,KAAKM,YAAYyB,KAAI,SAACC,EAAKtC,GAAU,MAAA,CACnDuC,MAAO,GAAGD,EAAI,GAAKA,EAAIE,MAAM,GAAGC,cAChCC,aAAcrC,EAAKE,oBAAoB+B,QAAUtC,OAE3B,QAApB2C,EAAU,QAAVC,EAACtC,KAAKH,YAAI,IAAAyC,OAAA,EAAAA,EAAElB,gBAAQ,IAAAiB,OAAA,EAAAA,EAAEE,UACxBvC,KAAKH,KAAKuB,SAAQpD,OAAAwE,OAAAxE,OAAAwE,OAAA,GACbxC,KAAKH,KAAKuB,UAAQ,CACrBmB,OAAQ/C,YAKdI,EAAA6C,UAAAC,SAAA,WACE1C,KAAK2C,sBACL3C,KAAK4C,uBAGChD,EAAA6C,UAAAE,oBAAA,mBACN,KAA4B,QAAxBxB,EAACnB,KAAKc,0BAAkB,IAAAK,OAAA,EAAAA,EAAEH,WAG5B,OAFAhB,KAAKQ,kBAAoBR,KAAK6C,cAAc7C,KAAKuB,mBAAoBvB,KAAK4B,wBAC1E5B,KAAKS,eAAiBT,KAAK6C,cAAc7C,KAAKwB,gBAAiBxB,KAAK8B,iBAGtE,IAAMgB,EAAoB9C,KAAKC,kBAAyC,QAAxBiB,EAAClB,KAAKc,0BAAkB,IAAAI,OAAA,EAAAA,EAAEF,UAAWhB,KAAKH,KAAKuB,SAASmB,QACpGO,EAAkBC,YACpB/C,KAAK4B,kBAAoBkB,EAAkBjB,OAC3C7B,KAAK8B,eAAiBgB,EAAkBrB,IAAI,EAAG,SAASI,OACxD7B,KAAKuB,mBAAqBuB,EAAkBE,IAAI,SAAW,EAC3DhD,KAAKwB,gBAAkBsB,EAAkBrB,IAAI,EAAG,SAAS9B,QAAU,EACnEK,KAAK0B,aAAejC,EAASO,KAAKuB,oBAClCvB,KAAK2B,UAAYlC,EAASO,KAAKwB,kBAEjCxB,KAAKQ,kBAAoBR,KAAK6C,cAAc7C,KAAKuB,mBAAoBvB,KAAK4B,mBAC1E5B,KAAKS,eAAiBT,KAAK6C,cAAc7C,KAAKwB,gBAAiBxB,KAAK8B,iBAG9DlC,EAAA6C,UAAAG,oBAAA,WACN,IAAMK,EAAkBjD,KAAKC,oBAAoB4B,KAAK7B,KAAK4B,mBAAmBjC,MAAMK,KAAKuB,oBACnF2B,EAAUlD,KAAKC,kBAAkBD,KAAKH,KAAKuB,SAAS8B,QAASlD,KAAKH,KAAKuB,SAASmB,QAClFW,EAAQH,YACV/C,KAAKU,wBAA0BwC,EAAQC,cAAcF,EAAiB,UAExE,IAAMG,EAAUpD,KAAKC,kBAAkBD,KAAKH,KAAKuB,SAASgC,QAASpD,KAAKH,KAAKuB,SAASmB,QAClFa,EAAQL,YACV/C,KAAKW,oBAAsByC,EAAQC,eAAeJ,EAAiB,WAIvErD,EAAA6C,UAAAa,cAAA,SAAcC,GACZ,IAAIC,EAAoBpD,EAAAA,YAAYyB,KAAK7B,KAAK4B,mBAAmBjC,MAAMK,KAAKuB,oBAC1D,SAAdgC,EACHC,EAAYA,EAAU/B,IAAI,EAAG,SACL,aAAd8B,IACVC,EAAYA,EAAUC,SAAS,EAAG,UAEnCzD,KAAKuB,mBAAqBiC,EAAU7D,QACpCK,KAAKwB,gBAAkBgC,EAAUE,QAAQjC,IAAI,EAAG,SAAS9B,QACzDK,KAAK0B,aAAejC,EAASO,KAAKuB,oBAClCvB,KAAK2B,UAAYlC,EAASO,KAAKwB,iBACF,IAAzBxB,KAAKwB,iBAAuC,aAAd+B,EACjCvD,KAAK4B,oBACiC,KAA5B5B,KAAKuB,oBAA2C,SAAdgC,EAC5CvD,KAAK8B,iBACgC,IAA5B9B,KAAKuB,oBAA0C,SAAdgC,EAC1CvD,KAAK4B,oBAC8B,KAAzB5B,KAAKwB,iBAAwC,aAAd+B,EACzCvD,KAAK8B,iBAEL9B,KAAK8B,eAAiB9B,KAAK4B,kBAE5B5B,KAAKQ,kBAAoBR,KAAK6C,cAAc7C,KAAKuB,mBAAoBvB,KAAK4B,mBAC1E5B,KAAKS,eAAiBT,KAAK6C,cAAc7C,KAAKwB,gBAAiBxB,KAAK8B,gBACpE9B,KAAK4C,uBAGChD,EAAA6C,UAAAI,cAAA,SAAclD,EAAeiC,GAGnC,IAHM,wBAAA7B,EAAAC,KACFe,EAA8B,GAC5B4C,EAAcvD,EAAAA,YAAYyB,KAAKD,GAAmBjC,MAAMA,GAAOgE,yBAC5DC,GACP,IAAMC,EAAOC,EAAK7D,oBAAoB4B,KAAKD,GAAmBjC,MAAMA,GAAOkE,KAAKD,GAC1EG,EAAaF,EAAKtB,OAAOuB,EAAKjE,KAAKuB,SAASmB,QAC9CyB,EAAgBF,EAAKjE,KAAKoE,cAAcC,MAAK,SAAAC,GAAK,OAAAA,IAAMJ,KACtDb,EAAUY,EAAK7D,kBAAkB6D,EAAKjE,KAAKuB,SAAS8B,QAASY,EAAKjE,KAAKuB,SAASmB,SACjFyB,GAAiBd,EAAQH,YAC5BiB,EAAgBd,EAAQkB,QAAQP,EAAM,QAExC,IAAMT,EAAUU,EAAK7D,kBAAkB6D,EAAKjE,KAAKuB,SAASgC,QAASU,EAAKjE,KAAKuB,SAASmB,SACjFyB,GAAiBZ,EAAQL,YAC5BiB,EAAgBZ,EAAQiB,SAASR,EAAM,QAEzC,IAAMzB,EACJ0B,EAAK7D,oBAAoB4B,KAAKD,GAAmBjC,MAAMA,GAAOkE,KAAKD,GAAarB,OAAOuB,EAAKjE,KAAKuB,SAASmB,UAC1GuB,EAAK7D,oBAAoBsC,OAAOuB,EAAKjE,KAAKuB,SAASmB,QAC/C+B,GACHN,GACkC,UAAX,UAAvBF,EAAKhD,0BAAkB,IAAAK,OAAA,EAAAA,EAAEH,iBAAS,IAAAE,GAAAA,GACnC2C,EAAKtB,OAAOuB,EAAKjE,KAAKuB,SAASmB,WAAmC,QAA5BD,EAAKwB,EAAKhD,0BAAkB,IAAAwB,OAAA,EAAAA,EAAEtB,WAChEuD,EAA2BT,EAAK7D,kBAAkB4D,GAAMO,QAAQN,EAAKhD,mBAAmBE,UAAW,OACnGwD,EAA0BV,EAAK7D,kBAAkB4D,GAAMQ,SAASjE,EAAAA,UAAU0D,EAAKhD,mBAAmBG,SAAU,OAC5GwD,EAC8B,QAAlCpC,EAACyB,EAAKhD,mBAAmBE,iBAAS,IAAAqB,GAAAA,GACF,UAA/ByB,EAAKhD,mBAAmBG,eAAO,IAAAyD,GAAAA,GAChCH,GACAC,EAEIG,GACHX,GACwE,WAAhD,QAAvBY,EAAAd,EAAKhD,0BAAkB,IAAA8D,OAAA,EAAAA,EAAE5D,aAAoC,QAA3B6D,EAAIf,EAAKhD,0BAAkB,IAAA+D,OAAA,EAAAA,EAAE5D,gBAAQ,IAAA6D,GAAAA,GACzEjB,EAAKtB,OAAOuB,EAAKjE,KAAKuB,SAASmB,WAAmC,QAA5BwC,EAAKjB,EAAKhD,0BAAkB,IAAAiE,OAAA,EAAAA,EAAE9D,SACtEF,EAAMhC,KAAK,CACT8E,KAAMD,EACNoB,QAASnB,EAAK7B,MACdI,aAAYA,EACZkC,mBAAkBA,EAClBK,iBAAgBA,EAChBF,WAAUA,EACVQ,cAA6F,QAA/EC,EAAApB,EAAKjE,KAAKsF,SAASC,MAAK,SAAAC,GAAK,OAAAxB,EAAKtB,OAAOxC,EAAKF,KAAKuB,SAASmB,UAAY8C,EAAExB,eAAK,IAAAqB,OAAA,EAAAA,EAAEI,UAAW,GAC1GtB,cAAaA,YAvCRJ,EAAc,EAAGA,GAAeD,EAAaC,MAA7CA,GA0CT,IAAK,IAAIlF,EAAIqC,EAAM,GAAGiE,QAAStG,EAAI,EAAGA,IACpCqC,EAAMwE,QAAQ,CAAE1B,KAAM,EAAGmB,QAAStG,EAAI,IAExC,OAAOqC,GAGTnB,EAAA6C,UAAA+C,UAAA,SAAUC,EAAwBzD,GAChC,KAAIA,EAAI6B,MAAQ,GAAhB,CACA,IAAK7B,EAAIgC,cAAe,CACtB,GAAIhE,KAAKY,iBAAkB,CACzB,IAAM8E,EAAYtF,EAAAA,YACfyB,KAAc,SAAT4D,EAAkBzF,KAAK4B,kBAAoB5B,KAAK8B,gBACrDnC,MAAe,SAAT8F,EAAkBzF,KAAKuB,mBAAqBvB,KAAKwB,iBACvDqC,KAAK7B,EAAI6B,MACZ,GAAI6B,EAAUrB,SAASrE,KAAKc,mBAAmBE,UAAW,OAOxD,OANAhB,KAAKc,mBAAqB,CACxBE,UAAW0E,EAAUnD,OAAOvC,KAAKH,KAAKuB,SAASmB,QAC/CtB,QAAS,MAEXjB,KAAKQ,kBAAoBR,KAAK6C,cAAc7C,KAAKuB,mBAAoBvB,KAAK4B,wBAC1E5B,KAAKS,eAAiBT,KAAK6C,cAAc7C,KAAKwB,gBAAiBxB,KAAK8B,iBAGtE9B,KAAKY,kBAAmB,EACxBZ,KAAKc,mBAAkB9C,OAAAwE,OAAAxE,OAAAwE,OAAA,GAClBxC,KAAKc,oBAAkB,CAC1BG,QAASyE,EAAUnD,OAAOvC,KAAKH,KAAKuB,SAASmB,eAG/CvC,KAAKY,kBAAmB,EACxBZ,KAAKc,mBAAqB,CACxBE,UAAWZ,EAAAA,YACRyB,KAAc,SAAT4D,EAAkBzF,KAAK4B,kBAAoB5B,KAAK8B,gBACrDnC,MAAe,SAAT8F,EAAkBzF,KAAKuB,mBAAqBvB,KAAKwB,iBACvDqC,KAAK7B,EAAI6B,MACTtB,OAAOvC,KAAKH,KAAKuB,SAASmB,QAC7BtB,QAAS,MAGbjB,KAAKQ,kBAAoBR,KAAK6C,cAAc7C,KAAKuB,mBAAoBvB,KAAK4B,mBAC1E5B,KAAKS,eAAiBT,KAAK6C,cAAc7C,KAAKwB,gBAAiBxB,KAAK8B,gBACpE9B,KAAKa,cAAe,EAChBb,KAAKc,mBAAmBE,WAAahB,KAAKc,mBAAmBG,UAC/DjB,KAAKa,cAAe,GAGpBmB,EAAIiD,cACNjF,KAAKF,MAAM6F,WAAW3D,EAAIiD,aAAc,OAG5CrF,EAAA6C,UAAAmD,WAAA,WACE5F,KAAKH,KAAKgG,WAAW7F,KAAKc,qBAE5BlB,EAAA6C,UAAAqD,iBAAA,WACE9F,KAAKH,KAAKkG,kCA1NbC,EAAAA,UAAS9F,KAAA,CAAC,CACT+F,SAAU,aACVC,SAAA,05VAwBaC,EAAAA,OAAMjG,KAAA,CAACZ,YA5Bb8G,EAAAA,iCCiCP,SAAAC,EAC8BC,EACpBC,EACAC,EACAC,GAHoBzG,KAAAsG,QAAAA,EACpBtG,KAAAuG,QAAAA,EACAvG,KAAAwG,QAAAA,EACAxG,KAAAyG,iBAAAA,EA5BDzG,KAAAoB,SAAuC,CAC9CmB,OAAQ/C,EACR0D,QAAS,GACTE,QAAS,IASFpD,KAAA0G,aAAuC,GACvC1G,KAAA2G,UAAwC,SACxC3G,KAAA4G,UAAyC,SACzC5G,KAAA6G,QAAkB,EAClB7G,KAAA8G,QAAkB,EAEjB9G,KAAA6F,WAAa,IAAIkB,EAAAA,cAAmC,GACtD/G,KAAAgH,QAAS,EAGThH,KAAAiH,gBAA4B,UAhBpCjJ,OAAAkJ,eAAab,EAAA5D,UAAA,gBAAa,KAA1B,SAA2B1B,GACzBf,KAAKe,MAAK/C,OAAAwE,OAAA,CAAKxB,UAAW,KAAMC,QAAS,MAASF,oCAEpD/C,OAAAkJ,eAAab,EAAA5D,UAAA,gBAAa,KAA1B,SAA2B1B,GACzBf,KAAKiH,gBAAkBlG,mCAsBzBsF,EAAA5D,UAAA0E,iBAAA,WACMnH,KAAKgH,OACPhH,KAAK+F,QAEL/F,KAAKoH,QAIDf,EAAA5D,UAAA2E,KAAA,WAAA,MAAArH,EAAAC,KACNA,KAAKgH,QAAS,EACd,IAAMK,EAAmBrH,KAAKwG,QAC3Bc,WACAC,oBAAoBvH,KAAKuG,SACzBiB,cACCC,EAAAA,iBACE,CACEd,UAAW3G,KAAK2G,UAChBC,UAAW5G,KAAK4G,UAChBC,QAAS7G,KAAK6G,QACdC,QAAS9G,KAAK8G,UAEhB,IAGHY,UAAS,GACNC,EAAS,IAAIC,EAAAA,cAAc,CAC/BC,aAAa,EACbR,iBAAgBA,EAChBS,eAAgB9H,KAAKwG,QAAQuB,iBAAiBC,aAC9CC,cAAe,qCAEjBjI,KAAKkI,WAAalI,KAAKwG,QAAQvI,OAAO0J,GACtC,IAAMQ,EAAU,IAAIC,EAAAA,gBAClBxI,EACAI,KAAKyG,iBACL4B,EAAAA,SAASpK,OAAO,CACdqK,UAAW,CACT,CACEC,QAASjJ,EACTkJ,SAAU,CACRrD,SAAUnF,KAAK0G,aACf3F,OAAmB,QAAZI,EAAAnB,KAAKsG,eAAO,IAAAnF,OAAA,EAAAA,EAAEmF,QAAQtH,QAASgB,KAAKe,MAC3CK,SAAUpB,KAAKoB,SACf6C,cAAejE,KAAKiH,gBACpBpB,WAAY7F,KAAKyI,UAAUC,KAAK1I,MAChC+F,MAAO/F,KAAK+F,MAAM2C,KAAK1I,YAMjCA,KAAKkI,WAAWS,OAAOR,GACvBnI,KAAKkI,WACFU,gBACAC,KAAKC,EAAAA,KAAK,IACVC,WAAU,WACThJ,EAAKgG,YAIXM,EAAA5D,UAAAgG,UAAA,SAAU1H,SACRf,KAAK6F,WAAWmD,KAAKjI,GACT,QAAZI,EAAAnB,KAAKsG,eAAO,IAAAnF,GAAAA,EAAEmF,QAAQ2C,WAAWlI,GACjCf,KAAKe,MAAQA,EACbf,KAAK+F,SAGPM,EAAA5D,UAAAsD,MAAA,WACE/F,KAAKgH,QAAS,EACdhH,KAAKkI,WAAWgB,SAChBlJ,KAAKkI,WAAWiB,oCA1GnBC,EAAAA,UAASlJ,KAAA,CAAC,CACT+F,SAAU,+DARHoD,EAAAA,UAASC,WAAA,CAAA,CAAAC,KAoCbC,EAAAA,MAAI,CAAAD,KAAIE,EAAAA,kBArCOC,EAAAA,kBAFXC,EAAAA,eAE4FC,EAAAA,sDAYlGC,EAAAA,6BAMAA,EAAAA,6BAGAA,EAAAA,4BAGAA,EAAAA,yBACAA,EAAAA,yBACAA,EAAAA,uBACAA,EAAAA,uBACAA,EAAAA,0BAEAC,EAAAA,iCAaAC,EAAAA,aAAY7J,KAAA,CAAC,kBC/BhB,iCANC8J,EAAAA,SAAQ9J,KAAA,CAAC,CACR+J,aAAc,CAACrK,EAAyByG,GACxC6D,QAAS,CAACC,EAAAA,aAAcC,EAAAA,cAAeC,EAAAA,YAAYC,UAAWC,EAAAA,aAAaD,WAC3EE,QAAS,CAAC5K,EAAyByG,GACnCoE,gBAAiB,CAAC7K","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\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) : adopt(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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") 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 throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, 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\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @format */\n\nimport { InjectionToken } from \"@angular/core\";\n\nexport const CONTAINER_DATA = new InjectionToken<{}>(\"CONTAINER_DATA\");\nexport const DATE_FORMAT = \"DD-MM-YYYY\";\n","import { ICurrentMonth } from \"../models/drp-config.model\";\n\nexport const getMonth = (index: number): ICurrentMonth => {\n let month;\n switch (index) {\n case 0:\n month = \"January\";\n break;\n case 1:\n month = \"February\";\n break;\n case 2:\n month = \"March\";\n break;\n case 3:\n month = \"April\";\n break;\n case 4:\n month = \"May\";\n break;\n case 5:\n month = \"June\";\n break;\n case 6:\n month = \"July\";\n break;\n case 7:\n month = \"August\";\n break;\n case 8:\n month = \"September\";\n break;\n case 9:\n month = \"October\";\n break;\n case 10:\n month = \"November\";\n break;\n case 11:\n month = \"December\";\n break;\n default:\n break;\n }\n return month;\n};\n","import { Component, Inject, OnInit } from \"@angular/core\";\nimport { CONTAINER_DATA, DATE_FORMAT } from \"../daterangepicker-constants\";\nimport { ICurrentMonth, ICurrentMonthDates, IDatePickerData, IWeekDay, ISelectedDatesConfig } from \"../models/drp-config.model\";\nimport { parseZone, Moment } from \"moment-timezone\";\nimport { getMonth } from \"../utils\";\nimport { ToastService } from \"mis-crystal-design-system/toast\";\n\n@Component({\n selector: \"mis-tz-drp\",\n templateUrl: \"./tz-drp-container.component.html\",\n styleUrls: [\"./tz-drp-container.component.scss\"]\n})\nexport class TzDrpContainerComponent implements OnInit {\n data: IDatePickerData;\n private parseZoneInstance = (...args) => {\n return parseZone(...args);\n };\n private rawWeekDays: string[] = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n weekDays: IWeekDay[] = [];\n currentMonthNumber: number;\n currentMonth: ICurrentMonth;\n currentYearNumber: number;\n currentMonthDates: ICurrentMonthDates[] = [];\n nextMonthNumber: number;\n nextMonth: ICurrentMonth;\n nextYearNumber: number;\n nextMonthDates: ICurrentMonthDates[] = [];\n isPreviousMonthDisabled: boolean = false;\n isNextMonthDisabled: boolean = false;\n selectionStarted = false;\n localSelectedDates: ISelectedDatesConfig;\n isDatesValid = false;\n\n constructor(@Inject(CONTAINER_DATA) data: IDatePickerData, private toast: ToastService) {\n this.data = data;\n this.localSelectedDates = this.data.dates;\n this.isDatesValid = false;\n if (this.localSelectedDates.startDate && this.localSelectedDates.endDate) {\n this.isDatesValid = true;\n }\n if (this.data?.dpConfig?.timezone) {\n this.parseZoneInstance = (...args) => {\n return parseZone(...args).tz(this.data.dpConfig.timezone);\n };\n }\n this.currentMonthNumber = this.parseZoneInstance().month();\n this.nextMonthNumber = this.parseZoneInstance().add(1, \"month\").month();\n this.currentMonth = getMonth(this.currentMonthNumber);\n this.nextMonth = getMonth(this.nextMonthNumber);\n this.currentYearNumber = this.parseZoneInstance().year();\n this.nextYearNumber = this.parseZoneInstance().add(1, \"month\").year();\n this.weekDays = this.rawWeekDays.map((day, index) => ({\n label: `${day[0]}${day.slice(1).toLowerCase()}`,\n isCurrentDay: this.parseZoneInstance().day() === index\n }));\n if (!this.data?.dpConfig?.format) {\n this.data.dpConfig = {\n ...this.data.dpConfig,\n format: DATE_FORMAT\n };\n }\n }\n\n ngOnInit(): void {\n this.currentDateInstance();\n this.calculateMinMaxDays();\n }\n\n private currentDateInstance(): void {\n if (!this.localSelectedDates?.startDate) {\n this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);\n this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);\n return;\n }\n const selectedStartDate = this.parseZoneInstance(this.localSelectedDates?.startDate, this.data.dpConfig.format);\n if (selectedStartDate.isValid()) {\n this.currentYearNumber = selectedStartDate.year();\n this.nextYearNumber = selectedStartDate.add(1, \"month\").year();\n this.currentMonthNumber = selectedStartDate.get(\"month\") - 1;\n this.nextMonthNumber = selectedStartDate.add(1, \"month\").month() - 1;\n this.currentMonth = getMonth(this.currentMonthNumber);\n this.nextMonth = getMonth(this.nextMonthNumber);\n }\n this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);\n this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);\n }\n\n private calculateMinMaxDays() {\n const currentInstance = this.parseZoneInstance().year(this.currentYearNumber).month(this.currentMonthNumber);\n const minDate = this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format);\n if (minDate.isValid()) {\n this.isPreviousMonthDisabled = minDate.isSameOrAfter(currentInstance, \"month\");\n }\n const maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format);\n if (maxDate.isValid()) {\n this.isNextMonthDisabled = maxDate.isSameOrBefore(currentInstance, \"month\");\n }\n }\n\n navigateMonth(direction: \"NEXT\" | \"PREVIOUS\"): void {\n let thisMonth: Moment = parseZone().year(this.currentYearNumber).month(this.currentMonthNumber);\n if (direction === \"NEXT\") {\n thisMonth = thisMonth.add(1, \"month\");\n } else if (direction === \"PREVIOUS\") {\n thisMonth = thisMonth.subtract(1, \"month\");\n }\n this.currentMonthNumber = thisMonth.month();\n this.nextMonthNumber = thisMonth.clone().add(1, \"month\").month();\n this.currentMonth = getMonth(this.currentMonthNumber);\n this.nextMonth = getMonth(this.nextMonthNumber);\n if (this.nextMonthNumber === 0 && direction === \"PREVIOUS\") {\n this.currentYearNumber--;\n } else if (this.currentMonthNumber === 11 && direction === \"NEXT\") {\n this.nextYearNumber++;\n }else if (this.currentMonthNumber === 0 && direction === \"NEXT\") {\n this.currentYearNumber++;\n } else if (this.nextMonthNumber === 11 && direction === \"PREVIOUS\") {\n this.nextYearNumber--;\n }else{\n this.nextYearNumber = this.currentYearNumber;\n }\n this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);\n this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);\n this.calculateMinMaxDays();\n }\n\n private generateDates(month: number, currentYearNumber: number): ICurrentMonthDates[] {\n let dates: ICurrentMonthDates[] = [];\n const daysInMonth = parseZone().year(currentYearNumber).month(month).daysInMonth();\n for (let currentDate = 1; currentDate <= daysInMonth; currentDate++) {\n const date = this.parseZoneInstance().year(currentYearNumber).month(month).date(currentDate);\n const dateString = date.format(this.data.dpConfig.format);\n let isDisabledDay = this.data.datesDisabled.some(d => d === dateString);\n const minDate = this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format);\n if (!isDisabledDay && minDate.isValid()) {\n isDisabledDay = minDate.isAfter(date, \"day\");\n }\n const maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format);\n if (!isDisabledDay && maxDate.isValid()) {\n isDisabledDay = maxDate.isBefore(date, \"day\");\n }\n const isCurrentDay =\n this.parseZoneInstance().year(currentYearNumber).month(month).date(currentDate).format(this.data.dpConfig.format) ===\n this.parseZoneInstance().format(this.data.dpConfig.format);\n const isSelectedStartDay =\n !isDisabledDay &&\n (this.localSelectedDates?.startDate ?? false) &&\n date.format(this.data.dpConfig.format) === this.localSelectedDates?.startDate;\n const isAfterSelectedStartDate = this.parseZoneInstance(date).isAfter(this.localSelectedDates.startDate, \"day\");\n const isBeforeSelectedEndDate = this.parseZoneInstance(date).isBefore(parseZone(this.localSelectedDates.endDate), \"day\");\n const inRangeDay =\n (this.localSelectedDates.startDate ?? false) &&\n (this.localSelectedDates.endDate ?? false) &&\n isAfterSelectedStartDate &&\n isBeforeSelectedEndDate;\n\n const isSelectedEndDay =\n !isDisabledDay &&\n ((this.localSelectedDates?.startDate && this.localSelectedDates?.endDate) ?? false) &&\n date.format(this.data.dpConfig.format) === this.localSelectedDates?.endDate;\n dates.push({\n date: currentDate,\n weekDay: date.day(),\n isCurrentDay,\n isSelectedStartDay,\n isSelectedEndDay,\n inRangeDay,\n toastMessage: this.data.messages.find(q => date.format(this.data.dpConfig.format) === q.date)?.message || \"\",\n isDisabledDay\n });\n }\n for (let i = dates[0].weekDay; i > 0; i--) {\n dates.unshift({ date: 0, weekDay: i - 1 });\n }\n return dates;\n }\n\n selectDay(from: \"LEFT\" | \"RIGHT\", day: ICurrentMonthDates) {\n if (day.date <= 0) return;\n if (!day.isDisabledDay) {\n if (this.selectionStarted) {\n const momentDay = parseZone()\n .year(from === \"LEFT\" ? this.currentYearNumber : this.nextYearNumber)\n .month(from === \"LEFT\" ? this.currentMonthNumber : this.nextMonthNumber)\n .date(day.date);\n if (momentDay.isBefore(this.localSelectedDates.startDate, \"day\")) {\n this.localSelectedDates = {\n startDate: momentDay.format(this.data.dpConfig.format),\n endDate: null\n };\n this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);\n this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);\n return;\n }\n this.selectionStarted = false;\n this.localSelectedDates = {\n ...this.localSelectedDates,\n endDate: momentDay.format(this.data.dpConfig.format)\n };\n } else {\n this.selectionStarted = true;\n this.localSelectedDates = {\n startDate: parseZone()\n .year(from === \"LEFT\" ? this.currentYearNumber : this.nextYearNumber)\n .month(from === \"LEFT\" ? this.currentMonthNumber : this.nextMonthNumber)\n .date(day.date)\n .format(this.data.dpConfig.format),\n endDate: null\n };\n }\n this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);\n this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);\n this.isDatesValid = false;\n if (this.localSelectedDates.startDate && this.localSelectedDates.endDate) {\n this.isDatesValid = true;\n }\n }\n if (day.toastMessage) {\n this.toast.displayMsg(day.toastMessage, 4000);\n }\n }\n applyDates() {\n this.data.dateChange(this.localSelectedDates);\n }\n cancelDatePicker() {\n this.data.close();\n }\n}\n","import { Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { Directive, ElementRef, EventEmitter, HostListener, Injector, Input, Optional, Output, Self, ViewContainerRef } from \"@angular/core\";\nimport { NgControl } from \"@angular/forms\";\nimport { take } from \"rxjs/operators\";\nimport { genPositionPairs } from \"mis-crystal-design-system/utils\";\nimport { CONTAINER_DATA, DATE_FORMAT } from \"./daterangepicker-constants\";\nimport { IDatePickerConfig, IDatePickerToastText, ISelectedDatesConfig } from \"./models/drp-config.model\";\nimport { TzDrpContainerComponent } from \"./tz-drp-container/tz-drp-container.component\";\n\n@Directive({\n selector: \"input[misTzDrp]\"\n})\nexport class TzDaterangepickerDirective {\n @Input() dpConfig: Partial<IDatePickerConfig> = {\n format: DATE_FORMAT,\n minDate: \"\",\n maxDate: \"\"\n };\n // dd-mm-yyyy 01-12-2022\n @Input() set selectedDates(dates: ISelectedDatesConfig) {\n this.dates = { startDate: null, endDate: null, ...dates };\n }\n @Input() set datesDisabled(dates: string[]) {\n this.dpDisabledDates = dates;\n }\n @Input() dateMessages: IDatePickerToastText[] = [];\n @Input() positionX: \"start\" | \"center\" | \"end\" = \"center\";\n @Input() positionY: \"top\" | \"center\" | \"bottom\" = \"bottom\";\n @Input() offsetX: number = 0;\n @Input() offsetY: number = 0;\n private overlayRef: OverlayRef;\n @Output() dateChange = new EventEmitter<ISelectedDatesConfig>(true);\n private isOpen = false;\n dates: ISelectedDatesConfig;\n\n private dpDisabledDates: string[] = [];\n\n constructor(\n @Self() @Optional() private control: NgControl,\n private element: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef\n ) {}\n\n @HostListener(\"click\")\n toggleDatePicker() {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n private open() {\n this.isOpen = true;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.element)\n .withPositions(\n genPositionPairs(\n {\n positionX: this.positionX,\n positionY: this.positionY,\n offsetX: this.offsetX,\n offsetY: this.offsetY\n },\n true\n )\n )\n .withPush(true);\n const config = new OverlayConfig({\n hasBackdrop: true,\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n backdropClass: \"cdk-overlay-transparent-backdrop\"\n });\n this.overlayRef = this.overlay.create(config);\n const tempRef = new ComponentPortal(\n TzDrpContainerComponent,\n this.viewContainerRef,\n Injector.create({\n providers: [\n {\n provide: CONTAINER_DATA,\n useValue: {\n messages: this.dateMessages,\n dates: this.control?.control.value || this.dates,\n dpConfig: this.dpConfig,\n datesDisabled: this.dpDisabledDates,\n dateChange: this.applyDate.bind(this),\n close: this.close.bind(this)\n }\n }\n ]\n })\n );\n this.overlayRef.attach(tempRef);\n this.overlayRef\n .backdropClick()\n .pipe(take(1))\n .subscribe(() => {\n this.close();\n });\n }\n\n applyDate(dates: ISelectedDatesConfig) {\n this.dateChange.emit(dates);\n this.control?.control.patchValue(dates);\n this.dates = dates;\n this.close();\n }\n\n close() {\n this.isOpen = false;\n this.overlayRef.detach();\n this.overlayRef.dispose();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { TzDrpContainerComponent } from \"./tz-drp-container/tz-drp-container.component\";\nimport { TzDaterangepickerDirective } from \"./tz-daterangepicker.directive\";\nimport { ToastModule } from \"mis-crystal-design-system/toast\";\nimport { ButtonModule } from \"mis-crystal-design-system/button\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\n\n@NgModule({\n declarations: [TzDrpContainerComponent, TzDaterangepickerDirective],\n imports: [CommonModule, OverlayModule, ToastModule.forRoot(), ButtonModule.forRoot()],\n exports: [TzDrpContainerComponent, TzDaterangepickerDirective],\n entryComponents: [TzDrpContainerComponent]\n})\nexport class DateRangepickerModuleV2 {}\n"]}
@@ -170,7 +170,7 @@
170
170
  TimeRangePickerComponent.decorators = [
171
171
  { type: core.Component, args: [{
172
172
  selector: "mis-timerangepicker",
173
- template: "<div class=\"rangepicker-container\" [ngStyle]=\"{'flexDirection': direction, 'gap': gap}\">\n <mis-timepicker\n [clockFormat]=\"clockFormat\"\n [interval]=\"interval\"\n [dateAsEpoch]=\"startDateEpoch\"\n [firstInterval]=\"firstIntervalForStartPicker\"\n (timeEmitter)=\"startPickerHandler($event)\"\n [timezone]=\"timezone\"\n [height]=\"height\"\n [inputWidth]=\"inputWidth\"\n [dropdownWidth]=\"dropdownWidth\"\n [showTooltip]=\"showTooltip\"\n [givenTime]=\"givenStartTime\"\n ></mis-timepicker>\n <p *ngIf=\"direction === 'row'\">-</p>\n <mis-timepicker\n [clockFormat]=\"clockFormat\"\n [interval]=\"interval\"\n [dateAsEpoch]=\"endDateEpoch\"\n [firstInterval]=\"firstIntervalForEndPicker\"\n (timeEmitter)=\"endPickerHandler($event)\"\n [rangeValidity]=\"rangeValidity\"\n [timezone]=\"timezone\"\n [height]=\"height\"\n [inputWidth]=\"inputWidth\"\n [dropdownWidth]=\"dropdownWidth\"\n [showTooltip]=\"showTooltip\"\n [givenTime]=\"givenEndTime\"\n ></mis-timepicker>\n</div>\n",
173
+ template: "<div class=\"rangepicker-container\" [ngStyle]=\"{'flexDirection': direction, 'gap': gap}\">\n <mis-timepicker\n [clockFormat]=\"clockFormat\"\n [interval]=\"interval\"\n [dateAsEpoch]=\"startDateEpoch\"\n [firstInterval]=\"firstIntervalForStartPicker\"\n (timeEmitter)=\"startPickerHandler($event)\"\n [timezone]=\"timezone\"\n [height]=\"height\"\n [inputWidth]=\"inputWidth\"\n [dropdownWidth]=\"dropdownWidth\"\n [showTooltip]=\"showTooltip\"\n [givenTime]=\"givenStartTime\"\n ></mis-timepicker>\n <p *ngIf=\"direction === 'row'\">-</p>\n <mis-timepicker\n [clockFormat]=\"clockFormat\"\n [interval]=\"interval\"\n [dateAsEpoch]=\"endDateEpoch\"\n [firstInterval]=\"firstIntervalForEndPicker\"\n (timeEmitter)=\"endPickerHandler($event)\"\n [rangeValidity]=\"rangeValidity\"\n [timezone]=\"timezone\"\n [height]=\"height\"\n [inputWidth]=\"inputWidth\"\n [dropdownWidth]=\"dropdownWidth\"\n [showTooltip]=\"showTooltip\"\n [givenTime]=\"givenEndTime\"\n [triggerChange]=\"triggerChange\"\n ></mis-timepicker>\n</div>\n",
174
174
  styles: [".rangepicker-container{display:flex;gap:1rem;align-items:center}p{margin:0;display:inline-flex;align-items:center}"]
175
175
  },] }
176
176
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"mis-crystal-design-system-timerangepicker.umd.js","sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts","../../../projects/mis-components/timerangepicker/mis-crystal-design-system-timerangepicker.ts"],"sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime, TDirection } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth: string = \"100px\";\n @Input() dropdownWidth?: string;\n @Input() height: string = \"46px\";\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() givenStartTime: number;\n @Input() givenEndTime: number;\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Input() showTooltip: boolean = true;\n @Input() direction: TDirection = 'row';\n @Input() gap: string = '1rem';\n\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n startDate!: string;\n endDate!: string;\n currDate!: string;\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n triggerChange: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n moment.tz.setDefault(this.timezone);\n this.startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n this.endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n this.currDate = moment().format(\"DD-MM-YYYY\");\n this.setFirstIntervals();\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // first interval for the start picker will be the one closest to the current time\n // if the start date is equal to the curr date\n if (this.startDate === this.currDate) {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.startTime = {\n valid: true,\n time: moment().add(offset, \"m\").format(this.timeFormat),\n epoch: moment().add(offset, \"m\").valueOf()\n };\n } else {\n this.firstIntervalForStartPicker = moment().startOf(\"d\").valueOf();\n this.startTime = {\n valid: true,\n time: moment(this.givenStartTime).format(this.timeFormat) || moment().add(offset, \"m\").format(this.timeFormat),\n epoch: this.givenStartTime || moment().add(offset, \"m\").valueOf()\n };\n }\n\n // for the end picker if the startDate and the endDate is same\n // the first interval is set one interval ahead of the first interval for start picker\n // else if the dates are different we set it to the start of the day\n if (this.startDate === this.endDate) {\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n } else {\n this.firstIntervalForEndPicker = moment().startOf(\"d\").valueOf();\n }\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat),\n epoch: this.firstIntervalForEndPicker\n };\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n this.rangeValidity = true;\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n if (this.startDate === this.endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`)\n .add(offset, \"m\")\n .valueOf();\n\n // if the first interval == 12:00am, set it as 11:59pm\n const intervalAsString = moment(this.firstIntervalForEndPicker).format(this.timeFormat);\n const endOfDayAsString = moment(moment(`${this.startDate}`, `DD-MM-YYYY ${this.timeFormat}`).endOf(\"d\").add(1, \"m\")).format(this.timeFormat);\n if (intervalAsString === endOfDayAsString) {\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).endOf(\"d\").valueOf();\n }\n\n } else {\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) &&\n this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n this.triggerChange = !this.triggerChange;\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n\n const timeMoment = moment(`${moment(date).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);\n let flag: boolean = false;\n\n // if the first interval is set to the start of the day\n // then we don't check its validity against the current time\n if ((this.givenStartTime && this.givenEndTime) || (this.startDate !== this.endDate && this.startDate !== this.currDate)) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timeMoment.isAfter(moment()) ? true : false;\n }\n\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation(validity: boolean) {\n if (validity && this.startDate === this.endDate) {\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["moment","EventEmitter","moment.tz","Component","ChangeDetectorRef","Input","Output","NgModule","CommonModule","FormsModule","TimePickerModule"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqCE,kCAAoB,GAAsB;YAAtB,QAAG,GAAH,GAAG,CAAmB;YA3BjC,eAAU,GAAW,OAAO,CAAC;YAE7B,WAAM,GAAW,MAAM,CAAC;YACxB,aAAQ,GAAW,cAAc,CAAC;YAClC,mBAAc,GAAWA,iBAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YAC9D,iBAAY,GAAWA,iBAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YAG5D,gBAAW,GAAW,EAAE,CAAC;YACzB,aAAQ,GAAW,EAAE,CAAC;YACtB,gBAAW,GAAY,IAAI,CAAC;YAC5B,cAAS,GAAe,KAAK,CAAC;YAC9B,QAAG,GAAW,MAAM,CAAC;YAEpB,qBAAgB,GAAG,IAAIC,iBAAY,EAAc,CAAC;YAM5D,gCAA2B,GAAWD,iBAAM,EAAE,CAAC,OAAO,EAAE,CAAC;YACzD,8BAAyB,GAAWA,iBAAM,EAAE,CAAC,OAAO,EAAE,CAAC;YAGvD,kBAAa,GAAY,IAAI,CAAC;YAC9B,kBAAa,GAAY,IAAI,CAAC;SAEgB;QAE9C,2CAAQ,GAAR,eAAa;QAEb,8CAAW,GAAX;YACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,KAAK,EAAE,GAAG,SAAS,GAAG,OAAO,CAAC;YAChEE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,SAAS,GAAGF,iBAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAClE,IAAI,CAAC,OAAO,GAAGA,iBAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,GAAGA,iBAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;;QAGD,oDAAiB,GAAjB;YACE,IAAM,OAAO,GAAGA,iBAAM,EAAE,CAAC,OAAO,EAAE,CAAC;YACnC,IAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;;;YAIzD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE;gBACpC,IAAI,CAAC,2BAA2B,GAAGA,iBAAM,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBACvE,IAAI,CAAC,SAAS,GAAG;oBACf,KAAK,EAAE,IAAI;oBACX,IAAI,EAAEA,iBAAM,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACvD,KAAK,EAAEA,iBAAM,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;iBAC3C,CAAC;aACH;iBAAM;gBACL,IAAI,CAAC,2BAA2B,GAAGA,iBAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBACnE,IAAI,CAAC,SAAS,GAAG;oBACf,KAAK,EAAE,IAAI;oBACX,IAAI,EAAEA,iBAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAIA,iBAAM,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBAC9G,KAAK,EAAE,IAAI,CAAC,cAAc,IAAIA,iBAAM,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;iBAClE,CAAC;aACH;;;;YAKD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;gBACnC,IAAI,CAAC,yBAAyB,GAAGA,iBAAM,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;aAC9F;iBAAM;gBACL,IAAI,CAAC,yBAAyB,GAAGA,iBAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;aAClE;YAED,IAAI,CAAC,OAAO,GAAG;gBACb,KAAK,EAAE,IAAI;gBACX,IAAI,EAAEA,iBAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBACpE,KAAK,EAAE,IAAI,CAAC,yBAAyB;aACtC,CAAC;SACH;QAED,gDAAa,GAAb,UAAc,IAAgB;YAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClC;;QAGD,qDAAkB,GAAlB,UAAmB,IAAW;YAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;;;;YAI1B,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;gBACnC,IAAI,OAAO,GAAGA,iBAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;gBACrE,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvD,IAAI,CAAC,yBAAyB,GAAGA,iBAAM,CAAI,IAAI,CAAC,SAAS,SAAI,IAAI,CAAC,SAAS,CAAC,IAAM,EAAE,kBAAgB,IAAI,CAAC,UAAY,CAAC;qBACnH,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;qBAChB,OAAO,EAAE,CAAC;;gBAGb,IAAM,gBAAgB,GAAGA,iBAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxF,IAAM,gBAAgB,GAAGA,iBAAM,CAACA,iBAAM,CAAC,KAAG,IAAI,CAAC,SAAW,EAAE,gBAAc,IAAI,CAAC,UAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC7I,IAAI,gBAAgB,KAAK,gBAAgB,EAAE;oBACzC,IAAI,CAAC,yBAAyB,GAAGA,iBAAM,CAAI,IAAI,CAAC,SAAS,SAAI,IAAI,CAAC,SAAS,CAAC,IAAM,EAAE,kBAAgB,IAAI,CAAC,UAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC7I;aAEF;iBAAM;gBACH,IAAM,QAAQ,GACd,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC;oBACvE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBAEpE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC;oBACjB,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC,aAAa;oBACrC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;oBAC9B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;oBAC1B,UAAU,EAAEA,iBAAM,CAAI,IAAI,CAAC,SAAS,SAAI,IAAI,CAAC,SAAS,CAAC,IAAM,EAAE,gBAAc,IAAI,CAAC,UAAY,CAAC,CAAC,OAAO,EAAE;oBACzG,QAAQ,EAAEA,iBAAM,CAAI,IAAI,CAAC,OAAO,SAAI,IAAI,CAAC,OAAO,CAAC,IAAM,EAAE,gBAAc,IAAI,CAAC,UAAY,CAAC,CAAC,OAAO,EAAE;iBACpG,CAAC,CAAC;aACN;YAED,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;SAC1C;QAED,mDAAgB,GAAhB,UAAiB,IAAW;YAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,IAAM,QAAQ,GACZ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAEjJ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC;gBACjB,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC,aAAa;gBACrC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;gBAC9B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBAC1B,UAAU,EAAEA,iBAAM,CAAI,IAAI,CAAC,SAAS,SAAI,IAAI,CAAC,SAAS,CAAC,IAAM,EAAE,gBAAc,IAAI,CAAC,UAAY,CAAC,CAAC,OAAO,EAAE;gBACzG,QAAQ,EAAEA,iBAAM,CAAI,IAAI,CAAC,OAAO,SAAI,IAAI,CAAC,OAAO,CAAC,IAAM,EAAE,gBAAc,IAAI,CAAC,UAAY,CAAC,CAAC,OAAO,EAAE;aACpG,CAAC,CAAC;SACJ;QAED,oDAAiB,GAAjB,UAAkB,IAAY,EAAE,IAAY;YAC1C,IAAM,IAAI,GAAG,sDAAsD,CAAC;YACpE,IAAM,IAAI,GAAG,iCAAiC,CAAC;YAC/C,IAAM,EAAE,GAAG,IAAI,CAAC,WAAW,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;YAEjD,IAAM,UAAU,GAAGA,iBAAM,CAAIA,iBAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,SAAI,IAAM,EAAE,kBAAgB,IAAI,CAAC,UAAY,CAAC,CAAC;YAC7G,IAAI,IAAI,GAAY,KAAK,CAAC;;;YAI1B,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACvH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;aACtC;iBAAM;gBACL,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,OAAO,CAACA,iBAAM,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;aACtE;YAED,OAAO,IAAI,CAAC;SACb;;QAGD,kDAAe,GAAf,UAAgB,QAAiB;YAC/B,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;gBAC/C,IAAM,WAAW,GAAGA,iBAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjE,IAAM,SAAS,GAAGA,iBAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC7D,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;gBAC1E,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;aAC1B;SACF;;;;gBA3KFG,cAAS,SAAC;oBACT,QAAQ,EAAE,qBAAqB;oBAC/B,ijCAA+C;;iBAEhD;;;gBAR0BC,sBAAiB;;;6BAUzCC,UAAK;gCACLA,UAAK;yBACLA,UAAK;2BACLA,UAAK;iCACLA,UAAK;+BACLA,UAAK;iCACLA,UAAK;+BACLA,UAAK;8BACLA,UAAK;2BACLA,UAAK;8BACLA,UAAK;4BACLA,UAAK;sBACLA,UAAK;mCAELC,WAAM;;;;QCbT;;QACS,6BAAO,GAAd;YACE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;SAC3D;;;;gBARFC,aAAQ,SAAC;oBACR,YAAY,EAAE,CAAC,wBAAwB,CAAC;oBACxC,OAAO,EAAE,CAACC,mBAAY,EAAEC,iBAAW,EAAEC,2BAAgB,CAAC;oBACtD,OAAO,EAAE,CAAC,wBAAwB,CAAC;iBACpC;;;ICVD;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"mis-crystal-design-system-timerangepicker.umd.js","sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts","../../../projects/mis-components/timerangepicker/mis-crystal-design-system-timerangepicker.ts"],"sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime, TDirection } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth: string = \"100px\";\n @Input() dropdownWidth?: string;\n @Input() height: string = \"46px\";\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() givenStartTime: number;\n @Input() givenEndTime: number;\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Input() showTooltip: boolean = true;\n @Input() direction: TDirection = 'row';\n @Input() gap: string = '1rem';\n\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n startDate!: string;\n endDate!: string;\n currDate!: string;\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n triggerChange: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n moment.tz.setDefault(this.timezone);\n this.startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n this.endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n this.currDate = moment().format(\"DD-MM-YYYY\");\n this.setFirstIntervals();\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // first interval for the start picker will be the one closest to the current time\n // if the start date is equal to the curr date\n if (this.startDate === this.currDate) {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.startTime = {\n valid: true,\n time: moment().add(offset, \"m\").format(this.timeFormat),\n epoch: moment().add(offset, \"m\").valueOf()\n };\n } else {\n this.firstIntervalForStartPicker = moment().startOf(\"d\").valueOf();\n this.startTime = {\n valid: true,\n time: moment(this.givenStartTime).format(this.timeFormat) || moment().add(offset, \"m\").format(this.timeFormat),\n epoch: this.givenStartTime || moment().add(offset, \"m\").valueOf()\n };\n }\n\n // for the end picker if the startDate and the endDate is same\n // the first interval is set one interval ahead of the first interval for start picker\n // else if the dates are different we set it to the start of the day\n if (this.startDate === this.endDate) {\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n } else {\n this.firstIntervalForEndPicker = moment().startOf(\"d\").valueOf();\n }\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat),\n epoch: this.firstIntervalForEndPicker\n };\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n this.rangeValidity = true;\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n if (this.startDate === this.endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`)\n .add(offset, \"m\")\n .valueOf();\n\n // if the first interval == 12:00am, set it as 11:59pm\n const intervalAsString = moment(this.firstIntervalForEndPicker).format(this.timeFormat);\n const endOfDayAsString = moment(moment(`${this.startDate}`, `DD-MM-YYYY ${this.timeFormat}`).endOf(\"d\").add(1, \"m\")).format(this.timeFormat);\n if (intervalAsString === endOfDayAsString) {\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).endOf(\"d\").valueOf();\n }\n\n } else {\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) &&\n this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n this.triggerChange = !this.triggerChange;\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n\n const timeMoment = moment(`${moment(date).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);\n let flag: boolean = false;\n\n // if the first interval is set to the start of the day\n // then we don't check its validity against the current time\n if ((this.givenStartTime && this.givenEndTime) || (this.startDate !== this.endDate && this.startDate !== this.currDate)) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timeMoment.isAfter(moment()) ? true : false;\n }\n\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation(validity: boolean) {\n if (validity && this.startDate === this.endDate) {\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["moment","EventEmitter","moment.tz","Component","ChangeDetectorRef","Input","Output","NgModule","CommonModule","FormsModule","TimePickerModule"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("moment-timezone"),require("@angular/common"),require("@angular/forms"),require("mis-crystal-design-system/timepicker")):"function"==typeof define&&define.amd?define("mis-crystal-design-system/timerangepicker",["exports","@angular/core","moment-timezone","@angular/common","@angular/forms","mis-crystal-design-system/timepicker"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self)["mis-crystal-design-system"]=t["mis-crystal-design-system"]||{},t["mis-crystal-design-system"].timerangepicker={}),t.ng.core,t.moment,t.ng.common,t.ng.forms,t["mis-crystal-design-system"].timepicker)}(this,(function(t,e,i,r,n,a){"use strict";function s(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach((function(i){if("default"!==i){var r=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,r.get?r:{enumerable:!0,get:function(){return t[i]}})}})),e.default=t,Object.freeze(e)}var m=s(i),o=function(){function t(t){this.cdr=t,this.inputWidth="100px",this.height="46px",this.timezone="Asia/Kolkata",this.startDateEpoch=m().tz(this.timezone).valueOf(),this.endDateEpoch=m().tz(this.timezone).valueOf(),this.clockFormat=12,this.interval=15,this.showTooltip=!0,this.direction="row",this.gap="1rem",this.timeRangeEmitter=new e.EventEmitter,this.firstIntervalForStartPicker=m().valueOf(),this.firstIntervalForEndPicker=m().valueOf(),this.rangeValidity=!0,this.triggerChange=!0}return t.prototype.ngOnInit=function(){},t.prototype.ngOnChanges=function(){this.timeFormat=12===this.clockFormat?"hh:mm a":"HH:mm",i.tz.setDefault(this.timezone),this.startDate=m(this.startDateEpoch).format("DD-MM-YYYY"),this.endDate=m(this.endDateEpoch).format("DD-MM-YYYY"),this.currDate=m().format("DD-MM-YYYY"),this.setFirstIntervals()},t.prototype.setFirstIntervals=function(){var t=m().minutes(),e=this.interval-t%this.interval;this.startDate===this.currDate?(this.firstIntervalForStartPicker=m().add(e,"m").valueOf(),this.startTime={valid:!0,time:m().add(e,"m").format(this.timeFormat),epoch:m().add(e,"m").valueOf()}):(this.firstIntervalForStartPicker=m().startOf("d").valueOf(),this.startTime={valid:!0,time:m(this.givenStartTime).format(this.timeFormat)||m().add(e,"m").format(this.timeFormat),epoch:this.givenStartTime||m().add(e,"m").valueOf()}),this.startDate===this.endDate?this.firstIntervalForEndPicker=m().add(e,"m").add(this.interval,"m").valueOf():this.firstIntervalForEndPicker=m().startOf("d").valueOf(),this.endTime={valid:!0,time:m(this.firstIntervalForEndPicker).format(this.timeFormat),epoch:this.firstIntervalForEndPicker}},t.prototype.emitTimeRange=function(t){this.timeRangeEmitter.emit(t)},t.prototype.startPickerHandler=function(t){if(this.startTime=t,this.rangeValidity=!0,this.startDate===this.endDate){var e=m(this.startTime.time,this.timeFormat).minutes(),i=this.interval-e%this.interval;this.firstIntervalForEndPicker=m(this.startDate+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).add(i,"m").valueOf(),m(this.firstIntervalForEndPicker).format(this.timeFormat)===m(m(""+this.startDate,"DD-MM-YYYY "+this.timeFormat).endOf("d").add(1,"m")).format(this.timeFormat)&&(this.firstIntervalForEndPicker=m(this.startDate+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).endOf("d").valueOf())}else{var r=this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch);this.rangeValidation(r),this.emitTimeRange({valid:r&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time,startEpoch:m(this.startDate+" "+this.startTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf(),endEpoch:m(this.endDate+" "+this.endTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf()})}this.triggerChange=!this.triggerChange},t.prototype.endPickerHandler=function(t){this.endTime=t;var e=this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch);this.rangeValidation(e),this.emitTimeRange({valid:e&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time,startEpoch:m(this.startDate+" "+this.startTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf(),endEpoch:m(this.endDate+" "+this.endTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf()})},t.prototype.checkTimeValidity=function(t,e){var i=12===this.clockFormat?/^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i:/^([01][0-9]|2[0-3]):[0-5][0-9]$/,r=m(m(e).format("DD-MM-YYYY")+" "+t,"'DD-MM-YYYY' "+this.timeFormat);return this.givenStartTime&&this.givenEndTime||this.startDate!==this.endDate&&this.startDate!==this.currDate?!!t.match(i):!(!t.match(i)||!r.isAfter(m()))},t.prototype.rangeValidation=function(t){if(t&&this.startDate===this.endDate){var e=m(this.startTime.time,this.timeFormat),i=m(this.endTime.time,this.timeFormat);this.rangeValidity=i.diff(e,"m")>=1,this.cdr.detectChanges()}},t}();o.decorators=[{type:e.Component,args:[{selector:"mis-timerangepicker",template:'<div class="rangepicker-container" [ngStyle]="{\'flexDirection\': direction, \'gap\': gap}">\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="startDateEpoch"\n [firstInterval]="firstIntervalForStartPicker"\n (timeEmitter)="startPickerHandler($event)"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="inputWidth"\n [dropdownWidth]="dropdownWidth"\n [showTooltip]="showTooltip"\n [givenTime]="givenStartTime"\n ></mis-timepicker>\n <p *ngIf="direction === \'row\'">-</p>\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="endDateEpoch"\n [firstInterval]="firstIntervalForEndPicker"\n (timeEmitter)="endPickerHandler($event)"\n [rangeValidity]="rangeValidity"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="inputWidth"\n [dropdownWidth]="dropdownWidth"\n [showTooltip]="showTooltip"\n [givenTime]="givenEndTime"\n ></mis-timepicker>\n</div>\n',styles:[".rangepicker-container{display:flex;gap:1rem;align-items:center}p{margin:0;display:inline-flex;align-items:center}"]}]}],o.ctorParameters=function(){return[{type:e.ChangeDetectorRef}]},o.propDecorators={inputWidth:[{type:e.Input}],dropdownWidth:[{type:e.Input}],height:[{type:e.Input}],timezone:[{type:e.Input}],startDateEpoch:[{type:e.Input}],endDateEpoch:[{type:e.Input}],givenStartTime:[{type:e.Input}],givenEndTime:[{type:e.Input}],clockFormat:[{type:e.Input}],interval:[{type:e.Input}],showTooltip:[{type:e.Input}],direction:[{type:e.Input}],gap:[{type:e.Input}],timeRangeEmitter:[{type:e.Output}]};var h=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[]}},t}();h.decorators=[{type:e.NgModule,args:[{declarations:[o],imports:[r.CommonModule,n.FormsModule,a.TimePickerModule],exports:[o]}]}],t.TimeRangePickerComponent=o,t.TimeRangePickerModule=h,Object.defineProperty(t,"__esModule",{value:!0})}));
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("moment-timezone"),require("@angular/common"),require("@angular/forms"),require("mis-crystal-design-system/timepicker")):"function"==typeof define&&define.amd?define("mis-crystal-design-system/timerangepicker",["exports","@angular/core","moment-timezone","@angular/common","@angular/forms","mis-crystal-design-system/timepicker"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self)["mis-crystal-design-system"]=t["mis-crystal-design-system"]||{},t["mis-crystal-design-system"].timerangepicker={}),t.ng.core,t.moment,t.ng.common,t.ng.forms,t["mis-crystal-design-system"].timepicker)}(this,(function(t,e,i,r,n,a){"use strict";function s(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach((function(i){if("default"!==i){var r=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,r.get?r:{enumerable:!0,get:function(){return t[i]}})}})),e.default=t,Object.freeze(e)}var m=s(i),o=function(){function t(t){this.cdr=t,this.inputWidth="100px",this.height="46px",this.timezone="Asia/Kolkata",this.startDateEpoch=m().tz(this.timezone).valueOf(),this.endDateEpoch=m().tz(this.timezone).valueOf(),this.clockFormat=12,this.interval=15,this.showTooltip=!0,this.direction="row",this.gap="1rem",this.timeRangeEmitter=new e.EventEmitter,this.firstIntervalForStartPicker=m().valueOf(),this.firstIntervalForEndPicker=m().valueOf(),this.rangeValidity=!0,this.triggerChange=!0}return t.prototype.ngOnInit=function(){},t.prototype.ngOnChanges=function(){this.timeFormat=12===this.clockFormat?"hh:mm a":"HH:mm",i.tz.setDefault(this.timezone),this.startDate=m(this.startDateEpoch).format("DD-MM-YYYY"),this.endDate=m(this.endDateEpoch).format("DD-MM-YYYY"),this.currDate=m().format("DD-MM-YYYY"),this.setFirstIntervals()},t.prototype.setFirstIntervals=function(){var t=m().minutes(),e=this.interval-t%this.interval;this.startDate===this.currDate?(this.firstIntervalForStartPicker=m().add(e,"m").valueOf(),this.startTime={valid:!0,time:m().add(e,"m").format(this.timeFormat),epoch:m().add(e,"m").valueOf()}):(this.firstIntervalForStartPicker=m().startOf("d").valueOf(),this.startTime={valid:!0,time:m(this.givenStartTime).format(this.timeFormat)||m().add(e,"m").format(this.timeFormat),epoch:this.givenStartTime||m().add(e,"m").valueOf()}),this.startDate===this.endDate?this.firstIntervalForEndPicker=m().add(e,"m").add(this.interval,"m").valueOf():this.firstIntervalForEndPicker=m().startOf("d").valueOf(),this.endTime={valid:!0,time:m(this.firstIntervalForEndPicker).format(this.timeFormat),epoch:this.firstIntervalForEndPicker}},t.prototype.emitTimeRange=function(t){this.timeRangeEmitter.emit(t)},t.prototype.startPickerHandler=function(t){if(this.startTime=t,this.rangeValidity=!0,this.startDate===this.endDate){var e=m(this.startTime.time,this.timeFormat).minutes(),i=this.interval-e%this.interval;this.firstIntervalForEndPicker=m(this.startDate+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).add(i,"m").valueOf(),m(this.firstIntervalForEndPicker).format(this.timeFormat)===m(m(""+this.startDate,"DD-MM-YYYY "+this.timeFormat).endOf("d").add(1,"m")).format(this.timeFormat)&&(this.firstIntervalForEndPicker=m(this.startDate+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).endOf("d").valueOf())}else{var r=this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch);this.rangeValidation(r),this.emitTimeRange({valid:r&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time,startEpoch:m(this.startDate+" "+this.startTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf(),endEpoch:m(this.endDate+" "+this.endTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf()})}this.triggerChange=!this.triggerChange},t.prototype.endPickerHandler=function(t){this.endTime=t;var e=this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch);this.rangeValidation(e),this.emitTimeRange({valid:e&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time,startEpoch:m(this.startDate+" "+this.startTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf(),endEpoch:m(this.endDate+" "+this.endTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf()})},t.prototype.checkTimeValidity=function(t,e){var i=12===this.clockFormat?/^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i:/^([01][0-9]|2[0-3]):[0-5][0-9]$/,r=m(m(e).format("DD-MM-YYYY")+" "+t,"'DD-MM-YYYY' "+this.timeFormat);return this.givenStartTime&&this.givenEndTime||this.startDate!==this.endDate&&this.startDate!==this.currDate?!!t.match(i):!(!t.match(i)||!r.isAfter(m()))},t.prototype.rangeValidation=function(t){if(t&&this.startDate===this.endDate){var e=m(this.startTime.time,this.timeFormat),i=m(this.endTime.time,this.timeFormat);this.rangeValidity=i.diff(e,"m")>=1,this.cdr.detectChanges()}},t}();o.decorators=[{type:e.Component,args:[{selector:"mis-timerangepicker",template:'<div class="rangepicker-container" [ngStyle]="{\'flexDirection\': direction, \'gap\': gap}">\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="startDateEpoch"\n [firstInterval]="firstIntervalForStartPicker"\n (timeEmitter)="startPickerHandler($event)"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="inputWidth"\n [dropdownWidth]="dropdownWidth"\n [showTooltip]="showTooltip"\n [givenTime]="givenStartTime"\n ></mis-timepicker>\n <p *ngIf="direction === \'row\'">-</p>\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="endDateEpoch"\n [firstInterval]="firstIntervalForEndPicker"\n (timeEmitter)="endPickerHandler($event)"\n [rangeValidity]="rangeValidity"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="inputWidth"\n [dropdownWidth]="dropdownWidth"\n [showTooltip]="showTooltip"\n [givenTime]="givenEndTime"\n [triggerChange]="triggerChange"\n ></mis-timepicker>\n</div>\n',styles:[".rangepicker-container{display:flex;gap:1rem;align-items:center}p{margin:0;display:inline-flex;align-items:center}"]}]}],o.ctorParameters=function(){return[{type:e.ChangeDetectorRef}]},o.propDecorators={inputWidth:[{type:e.Input}],dropdownWidth:[{type:e.Input}],height:[{type:e.Input}],timezone:[{type:e.Input}],startDateEpoch:[{type:e.Input}],endDateEpoch:[{type:e.Input}],givenStartTime:[{type:e.Input}],givenEndTime:[{type:e.Input}],clockFormat:[{type:e.Input}],interval:[{type:e.Input}],showTooltip:[{type:e.Input}],direction:[{type:e.Input}],gap:[{type:e.Input}],timeRangeEmitter:[{type:e.Output}]};var h=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[]}},t}();h.decorators=[{type:e.NgModule,args:[{declarations:[o],imports:[r.CommonModule,n.FormsModule,a.TimePickerModule],exports:[o]}]}],t.TimeRangePickerComponent=o,t.TimeRangePickerModule=h,Object.defineProperty(t,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=mis-crystal-design-system-timerangepicker.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts"],"names":["TimeRangePickerComponent","cdr","this","inputWidth","height","timezone","startDateEpoch","moment","tz","valueOf","endDateEpoch","clockFormat","interval","showTooltip","direction","gap","timeRangeEmitter","EventEmitter","firstIntervalForStartPicker","firstIntervalForEndPicker","rangeValidity","triggerChange","prototype","ngOnInit","ngOnChanges","timeFormat","moment.tz","setDefault","startDate","format","endDate","currDate","setFirstIntervals","minutes","offset","add","startTime","valid","time","epoch","startOf","givenStartTime","endTime","emitTimeRange","data","emit","startPickerHandler","endOf","validity","checkTimeValidity","trim","rangeValidation","startEpoch","endEpoch","endPickerHandler","date","RE","timeMoment","givenEndTime","match","isAfter","startMoment","endMoment","diff","detectChanges","Component","args","selector","template","ChangeDetectorRef","Input","Output","TimeRangePickerModule","forRoot","ngModule","providers","NgModule","declarations","imports","CommonModule","FormsModule","TimePickerModule","exports"],"mappings":"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","sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime, TDirection } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth: string = \"100px\";\n @Input() dropdownWidth?: string;\n @Input() height: string = \"46px\";\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() givenStartTime: number;\n @Input() givenEndTime: number;\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Input() showTooltip: boolean = true;\n @Input() direction: TDirection = 'row';\n @Input() gap: string = '1rem';\n\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n startDate!: string;\n endDate!: string;\n currDate!: string;\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n triggerChange: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n moment.tz.setDefault(this.timezone);\n this.startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n this.endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n this.currDate = moment().format(\"DD-MM-YYYY\");\n this.setFirstIntervals();\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // first interval for the start picker will be the one closest to the current time\n // if the start date is equal to the curr date\n if (this.startDate === this.currDate) {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.startTime = {\n valid: true,\n time: moment().add(offset, \"m\").format(this.timeFormat),\n epoch: moment().add(offset, \"m\").valueOf()\n };\n } else {\n this.firstIntervalForStartPicker = moment().startOf(\"d\").valueOf();\n this.startTime = {\n valid: true,\n time: moment(this.givenStartTime).format(this.timeFormat) || moment().add(offset, \"m\").format(this.timeFormat),\n epoch: this.givenStartTime || moment().add(offset, \"m\").valueOf()\n };\n }\n\n // for the end picker if the startDate and the endDate is same\n // the first interval is set one interval ahead of the first interval for start picker\n // else if the dates are different we set it to the start of the day\n if (this.startDate === this.endDate) {\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n } else {\n this.firstIntervalForEndPicker = moment().startOf(\"d\").valueOf();\n }\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat),\n epoch: this.firstIntervalForEndPicker\n };\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n this.rangeValidity = true;\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n if (this.startDate === this.endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`)\n .add(offset, \"m\")\n .valueOf();\n\n // if the first interval == 12:00am, set it as 11:59pm\n const intervalAsString = moment(this.firstIntervalForEndPicker).format(this.timeFormat);\n const endOfDayAsString = moment(moment(`${this.startDate}`, `DD-MM-YYYY ${this.timeFormat}`).endOf(\"d\").add(1, \"m\")).format(this.timeFormat);\n if (intervalAsString === endOfDayAsString) {\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).endOf(\"d\").valueOf();\n }\n\n } else {\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) &&\n this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n this.triggerChange = !this.triggerChange;\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n\n const timeMoment = moment(`${moment(date).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);\n let flag: boolean = false;\n\n // if the first interval is set to the start of the day\n // then we don't check its validity against the current time\n if ((this.givenStartTime && this.givenEndTime) || (this.startDate !== this.endDate && this.startDate !== this.currDate)) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timeMoment.isAfter(moment()) ? true : false;\n }\n\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation(validity: boolean) {\n if (validity && this.startDate === this.endDate) {\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}"]}
1
+ {"version":3,"sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts"],"names":["TimeRangePickerComponent","cdr","this","inputWidth","height","timezone","startDateEpoch","moment","tz","valueOf","endDateEpoch","clockFormat","interval","showTooltip","direction","gap","timeRangeEmitter","EventEmitter","firstIntervalForStartPicker","firstIntervalForEndPicker","rangeValidity","triggerChange","prototype","ngOnInit","ngOnChanges","timeFormat","moment.tz","setDefault","startDate","format","endDate","currDate","setFirstIntervals","minutes","offset","add","startTime","valid","time","epoch","startOf","givenStartTime","endTime","emitTimeRange","data","emit","startPickerHandler","endOf","validity","checkTimeValidity","trim","rangeValidation","startEpoch","endEpoch","endPickerHandler","date","RE","timeMoment","givenEndTime","match","isAfter","startMoment","endMoment","diff","detectChanges","Component","args","selector","template","ChangeDetectorRef","Input","Output","TimeRangePickerModule","forRoot","ngModule","providers","NgModule","declarations","imports","CommonModule","FormsModule","TimePickerModule","exports"],"mappings":"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","sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime, TDirection } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth: string = \"100px\";\n @Input() dropdownWidth?: string;\n @Input() height: string = \"46px\";\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() givenStartTime: number;\n @Input() givenEndTime: number;\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Input() showTooltip: boolean = true;\n @Input() direction: TDirection = 'row';\n @Input() gap: string = '1rem';\n\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n startDate!: string;\n endDate!: string;\n currDate!: string;\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n triggerChange: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n moment.tz.setDefault(this.timezone);\n this.startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n this.endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n this.currDate = moment().format(\"DD-MM-YYYY\");\n this.setFirstIntervals();\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // first interval for the start picker will be the one closest to the current time\n // if the start date is equal to the curr date\n if (this.startDate === this.currDate) {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.startTime = {\n valid: true,\n time: moment().add(offset, \"m\").format(this.timeFormat),\n epoch: moment().add(offset, \"m\").valueOf()\n };\n } else {\n this.firstIntervalForStartPicker = moment().startOf(\"d\").valueOf();\n this.startTime = {\n valid: true,\n time: moment(this.givenStartTime).format(this.timeFormat) || moment().add(offset, \"m\").format(this.timeFormat),\n epoch: this.givenStartTime || moment().add(offset, \"m\").valueOf()\n };\n }\n\n // for the end picker if the startDate and the endDate is same\n // the first interval is set one interval ahead of the first interval for start picker\n // else if the dates are different we set it to the start of the day\n if (this.startDate === this.endDate) {\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n } else {\n this.firstIntervalForEndPicker = moment().startOf(\"d\").valueOf();\n }\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat),\n epoch: this.firstIntervalForEndPicker\n };\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n this.rangeValidity = true;\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n if (this.startDate === this.endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`)\n .add(offset, \"m\")\n .valueOf();\n\n // if the first interval == 12:00am, set it as 11:59pm\n const intervalAsString = moment(this.firstIntervalForEndPicker).format(this.timeFormat);\n const endOfDayAsString = moment(moment(`${this.startDate}`, `DD-MM-YYYY ${this.timeFormat}`).endOf(\"d\").add(1, \"m\")).format(this.timeFormat);\n if (intervalAsString === endOfDayAsString) {\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).endOf(\"d\").valueOf();\n }\n\n } else {\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) &&\n this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n this.triggerChange = !this.triggerChange;\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n\n const timeMoment = moment(`${moment(date).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);\n let flag: boolean = false;\n\n // if the first interval is set to the start of the day\n // then we don't check its validity against the current time\n if ((this.givenStartTime && this.givenEndTime) || (this.startDate !== this.endDate && this.startDate !== this.currDate)) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timeMoment.isAfter(moment()) ? true : false;\n }\n\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation(validity: boolean) {\n if (validity && this.startDate === this.endDate) {\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}"]}
@@ -86,11 +86,24 @@ export class TzDrpContainerComponent {
86
86
  thisMonth = thisMonth.subtract(1, "month");
87
87
  }
88
88
  this.currentMonthNumber = thisMonth.month();
89
- this.nextMonthNumber = thisMonth.add(1, "month").month();
89
+ this.nextMonthNumber = thisMonth.clone().add(1, "month").month();
90
90
  this.currentMonth = getMonth(this.currentMonthNumber);
91
91
  this.nextMonth = getMonth(this.nextMonthNumber);
92
- this.currentYearNumber = thisMonth.year();
93
- this.nextYearNumber = thisMonth.add(1, "month").year();
92
+ if (this.nextMonthNumber === 0 && direction === "PREVIOUS") {
93
+ this.currentYearNumber--;
94
+ }
95
+ else if (this.currentMonthNumber === 11 && direction === "NEXT") {
96
+ this.nextYearNumber++;
97
+ }
98
+ else if (this.currentMonthNumber === 0 && direction === "NEXT") {
99
+ this.currentYearNumber++;
100
+ }
101
+ else if (this.nextMonthNumber === 11 && direction === "PREVIOUS") {
102
+ this.nextYearNumber--;
103
+ }
104
+ else {
105
+ this.nextYearNumber = this.currentYearNumber;
106
+ }
94
107
  this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);
95
108
  this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);
96
109
  this.calculateMinMaxDays();
@@ -202,4 +215,4 @@ TzDrpContainerComponent.ctorParameters = () => [
202
215
  { type: undefined, decorators: [{ type: Inject, args: [CONTAINER_DATA,] }] },
203
216
  { type: ToastService }
204
217
  ];
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcmFuZ2VwaWNrZXJfdjIvdHotZHJwLWNvbnRhaW5lci90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQU8vRCxNQUFNLE9BQU8sdUJBQXVCO0lBcUJsQyxZQUFvQyxJQUFxQixFQUFVLEtBQW1COztRQUFuQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBbkI5RSxzQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUU7WUFDdEMsT0FBTyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFDTSxnQkFBVyxHQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEYsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUkxQixzQkFBaUIsR0FBeUIsRUFBRSxDQUFDO1FBSTdDLG1CQUFjLEdBQXlCLEVBQUUsQ0FBQztRQUMxQyw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFDekMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3JDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV6QixpQkFBWSxHQUFH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aEpBQWdEOzthQUVqRDs7OzRDQXNCYyxNQUFNLFNBQUMsY0FBYztZQTVCM0IsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ09OVEFJTkVSX0RBVEEsIERBVEVfRk9STUFUIH0gZnJvbSBcIi4uL2RhdGVyYW5nZXBpY2tlci1jb25zdGFudHNcIjtcbmltcG9ydCB7IElDdXJyZW50TW9udGgsIElDdXJyZW50TW9udGhEYXRlcywgSURhdGVQaWNrZXJEYXRhLCBJV2Vla0RheSwgSVNlbGVjdGVkRGF0ZXNDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2RycC1jb25maWcubW9kZWxcIjtcbmltcG9ydCB7IHBhcnNlWm9uZSwgTW9tZW50IH0gZnJvbSBcIm1vbWVudC10aW1lem9uZVwiO1xuaW1wb3J0IHsgZ2V0TW9udGggfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL3RvYXN0XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdHotZHJwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUekRycENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRhdGE6IElEYXRlUGlja2VyRGF0YTtcbiAgcHJpdmF0ZSBwYXJzZVpvbmVJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIHBhcnNlWm9uZSguLi5hcmdzKTtcbiAgfTtcbiAgcHJpdmF0ZSByYXdXZWVrRGF5czogc3RyaW5nW10gPSBbXCJTVU5cIiwgXCJNT05cIiwgXCJUVUVcIiwgXCJXRURcIiwgXCJUSFVcIiwgXCJGUklcIiwgXCJTQVRcIl07XG4gIHdlZWtEYXlzOiBJV2Vla0RheVtdID0gW107XG4gIGN1cnJlbnRNb250aE51bWJlcjogbnVtYmVyO1xuICBjdXJyZW50TW9udGg6IElDdXJyZW50TW9udGg7XG4gIGN1cnJlbnRZZWFyTnVtYmVyOiBudW1iZXI7XG4gIGN1cnJlbnRNb250aERhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICBuZXh0TW9udGhOdW1iZXI6IG51bWJlcjtcbiAgbmV4dE1vbnRoOiBJQ3VycmVudE1vbnRoO1xuICBuZXh0WWVhck51bWJlcjogbnVtYmVyO1xuICBuZXh0TW9udGhEYXRlczogSUN1cnJlbnRNb250aERhdGVzW10gPSBbXTtcbiAgaXNQcmV2aW91c01vbnRoRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNOZXh0TW9udGhEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3Rpb25TdGFydGVkID0gZmFsc2U7XG4gIGxvY2FsU2VsZWN0ZWREYXRlczogSVNlbGVjdGVkRGF0ZXNDb25maWc7XG4gIGlzRGF0ZXNWYWxpZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQ09OVEFJTkVSX0RBVEEpIGRhdGE6IElEYXRlUGlja2VyRGF0YSwgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHRoaXMuZGF0YS5kYXRlcztcbiAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSkge1xuICAgICAgdGhpcy5pc0RhdGVzVmFsaWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhPy5kcENvbmZpZz8udGltZXpvbmUpIHtcbiAgICAgIHRoaXMucGFyc2Vab25lSW5zdGFuY2UgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gcGFyc2Vab25lKC4uLmFyZ3MpLnR6KHRoaXMuZGF0YS5kcENvbmZpZy50aW1lem9uZSk7XG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5tb250aCgpO1xuICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgdGhpcy5jdXJyZW50WWVhck51bWJlciA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKCk7XG4gICAgdGhpcy5uZXh0WWVhck51bWJlciA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5hZGQoMSwgXCJtb250aFwiKS55ZWFyKCk7XG4gICAgdGhpcy53ZWVrRGF5cyA9IHRoaXMucmF3V2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuICAgICAgbGFiZWw6IGAke2RheVswXX0ke2RheS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICBpc0N1cnJlbnREYXk6IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5kYXkoKSA9PT0gaW5kZXhcbiAgICB9KSk7XG4gICAgaWYgKCF0aGlzLmRhdGE/LmRwQ29uZmlnPy5mb3JtYXQpIHtcbiAgICAgIHRoaXMuZGF0YS5kcENvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXRhLmRwQ29uZmlnLFxuICAgICAgICBmb3JtYXQ6IERBVEVfRk9STUFUXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudERhdGVJbnN0YW5jZSgpO1xuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RGF0ZUluc3RhbmNlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgICB0aGlzLm5leHRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyLCB0aGlzLm5leHRZZWFyTnVtYmVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRTdGFydERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5zdGFydERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgIGlmIChzZWxlY3RlZFN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSBzZWxlY3RlZFN0YXJ0RGF0ZS55ZWFyKCk7XG4gICAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikueWVhcigpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSBzZWxlY3RlZFN0YXJ0RGF0ZS5nZXQoXCJtb250aFwiKSAtIDE7XG4gICAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHNlbGVjdGVkU3RhcnREYXRlLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCkgLSAxO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgICB0aGlzLm5leHRNb250aCA9IGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1pbk1heERheXMoKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlcikubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICBpZiAobWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBtaW5EYXRlLmlzU2FtZU9yQWZ0ZXIoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgaWYgKG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWQgPSBtYXhEYXRlLmlzU2FtZU9yQmVmb3JlKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZU1vbnRoKGRpcmVjdGlvbjogXCJORVhUXCIgfCBcIlBSRVZJT1VTXCIpOiB2b2lkIHtcbiAgICBsZXQgdGhpc01vbnRoOiBNb21lbnQgPSBwYXJzZVpvbmUoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICBpZiAoZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICAgdGhpc01vbnRoID0gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBcIlBSRVZJT1VTXCIpIHtcbiAgICAgIHRoaXNNb250aCA9IHRoaXNNb250aC5zdWJ0cmFjdCgxLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IHRoaXNNb250aC5tb250aCgpO1xuICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyID0gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgdGhpcy5jdXJyZW50WWVhck51bWJlciA9IHRoaXNNb250aC55ZWFyKCk7XG4gICAgdGhpcy5uZXh0WWVhck51bWJlciA9IHRoaXNNb250aC5hZGQoMSwgXCJtb250aFwiKS55ZWFyKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRGF0ZXMobW9udGg6IG51bWJlciwgY3VycmVudFllYXJOdW1iZXI6IG51bWJlcik6IElDdXJyZW50TW9udGhEYXRlc1tdIHtcbiAgICBsZXQgZGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdID0gW107XG4gICAgY29uc3QgZGF5c0luTW9udGggPSBwYXJzZVpvbmUoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF5c0luTW9udGgoKTtcbiAgICBmb3IgKGxldCBjdXJyZW50RGF0ZSA9IDE7IGN1cnJlbnREYXRlIDw9IGRheXNJbk1vbnRoOyBjdXJyZW50RGF0ZSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKTtcbiAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGxldCBpc0Rpc2FibGVkRGF5ID0gdGhpcy5kYXRhLmRhdGVzRGlzYWJsZWQuc29tZShkID0+IGQgPT09IGRhdGVTdHJpbmcpO1xuICAgICAgY29uc3QgbWluRGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIGlzRGlzYWJsZWREYXkgPSBtaW5EYXRlLmlzQWZ0ZXIoZGF0ZSwgXCJkYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICBpZiAoIWlzRGlzYWJsZWREYXkgJiYgbWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgaXNEaXNhYmxlZERheSA9IG1heERhdGUuaXNCZWZvcmUoZGF0ZSwgXCJkYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBpc0N1cnJlbnREYXkgPVxuICAgICAgICB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT1cbiAgICAgICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRTdGFydERheSA9XG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uc3RhcnREYXRlID8/IGZhbHNlKSAmJlxuICAgICAgICBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZTtcbiAgICAgIGNvbnN0IGlzQWZ0ZXJTZWxlY3RlZFN0YXJ0RGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoZGF0ZSkuaXNBZnRlcih0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUsIFwiZGF5XCIpO1xuICAgICAgY29uc3QgaXNCZWZvcmVTZWxlY3RlZEVuZERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKGRhdGUpLmlzQmVmb3JlKHBhcnNlWm9uZSh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlKSwgXCJkYXlcIik7XG4gICAgICBjb25zdCBpblJhbmdlRGF5ID1cbiAgICAgICAgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZSA/PyBmYWxzZSkgJiZcbiAgICAgICAgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLmVuZERhdGUgPz8gZmFsc2UpICYmXG4gICAgICAgIGlzQWZ0ZXJTZWxlY3RlZFN0YXJ0RGF0ZSAmJlxuICAgICAgICBpc0JlZm9yZVNlbGVjdGVkRW5kRGF0ZTtcblxuICAgICAgY29uc3QgaXNTZWxlY3RlZEVuZERheSA9XG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgICgodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uZW5kRGF0ZSkgPz8gZmFsc2UpICYmXG4gICAgICAgIGRhdGUuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpID09PSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uZW5kRGF0ZTtcbiAgICAgIGRhdGVzLnB1c2goe1xuICAgICAgICBkYXRlOiBjdXJyZW50RGF0ZSxcbiAgICAgICAgd2Vla0RheTogZGF0ZS5kYXkoKSxcbiAgICAgICAgaXNDdXJyZW50RGF5LFxuICAgICAgICBpc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgIGlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgIGluUmFuZ2VEYXksXG4gICAgICAgIHRvYXN0TWVzc2FnZTogdGhpcy5kYXRhLm1lc3NhZ2VzLmZpbmQocSA9PiBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT0gcS5kYXRlKT8ubWVzc2FnZSB8fCBcIlwiLFxuICAgICAgICBpc0Rpc2FibGVkRGF5XG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGRhdGVzWzBdLndlZWtEYXk7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGRhdGVzLnVuc2hpZnQoeyBkYXRlOiAwLCB3ZWVrRGF5OiBpIC0gMSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgc2VsZWN0RGF5KGZyb206IFwiTEVGVFwiIHwgXCJSSUdIVFwiLCBkYXk6IElDdXJyZW50TW9udGhEYXRlcykge1xuICAgIGlmIChkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gICAgaWYgKCFkYXkuaXNEaXNhYmxlZERheSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhcnRlZCkge1xuICAgICAgICBjb25zdCBtb21lbnREYXkgPSBwYXJzZVpvbmUoKVxuICAgICAgICAgIC55ZWFyKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50WWVhck51bWJlciA6IHRoaXMubmV4dFllYXJOdW1iZXIpXG4gICAgICAgICAgLm1vbnRoKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgOiB0aGlzLm5leHRNb250aE51bWJlcilcbiAgICAgICAgICAuZGF0ZShkYXkuZGF0ZSk7XG4gICAgICAgIGlmIChtb21lbnREYXkuaXNCZWZvcmUodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlLCBcImRheVwiKSkge1xuICAgICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzID0ge1xuICAgICAgICAgICAgc3RhcnREYXRlOiBtb21lbnREYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpLFxuICAgICAgICAgICAgZW5kRGF0ZTogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgICAgICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHtcbiAgICAgICAgICAuLi50aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyxcbiAgICAgICAgICBlbmREYXRlOiBtb21lbnREYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHtcbiAgICAgICAgICBzdGFydERhdGU6IHBhcnNlWm9uZSgpXG4gICAgICAgICAgICAueWVhcihmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudFllYXJOdW1iZXIgOiB0aGlzLm5leHRZZWFyTnVtYmVyKVxuICAgICAgICAgICAgLm1vbnRoKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgOiB0aGlzLm5leHRNb250aE51bWJlcilcbiAgICAgICAgICAgIC5kYXRlKGRheS5kYXRlKVxuICAgICAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSxcbiAgICAgICAgICBlbmREYXRlOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKTtcbiAgICAgIHRoaXMubmV4dE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIsIHRoaXMubmV4dFllYXJOdW1iZXIpO1xuICAgICAgdGhpcy5pc0RhdGVzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSkge1xuICAgICAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXkudG9hc3RNZXNzYWdlKSB7XG4gICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgfVxuICB9XG4gIGFwcGx5RGF0ZXMoKSB7XG4gICAgdGhpcy5kYXRhLmRhdGVDaGFuZ2UodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMpO1xuICB9XG4gIGNhbmNlbERhdGVQaWNrZXIoKSB7XG4gICAgdGhpcy5kYXRhLmNsb3NlKCk7XG4gIH1cbn1cbiJdfQ==
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcmFuZ2VwaWNrZXJfdjIvdHotZHJwLWNvbnRhaW5lci90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQU8vRCxNQUFNLE9BQU8sdUJBQXVCO0lBcUJsQyxZQUFvQyxJQUFxQixFQUFVLEtBQW1COztRQUFuQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBbkI5RSxzQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUU7WUFDdEMsT0FBTyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFDTSxnQkFBVyxHQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEYsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUkxQixzQkFBaUIsR0FBeUIsRUFBRSxDQUFDO1FBSTdDLG1CQUFjLEdBQXlCLEVBQUUsQ0FBQztRQUMxQyw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFDekMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3JDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV6QixpQkFBWSxHQUFH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QUFJLENBQUM7YUFDMUI7U0FDRjtRQUNELElBQUksR0FBRyxDQUFDLFlBQVksRUFBRTtZQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQixDQUFDOzs7WUEzTkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0QixxaEpBQWdEOzthQUVqRDs7OzRDQXNCYyxNQUFNLFNBQUMsY0FBYztZQTVCM0IsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ09OVEFJTkVSX0RBVEEsIERBVEVfRk9STUFUIH0gZnJvbSBcIi4uL2RhdGVyYW5nZXBpY2tlci1jb25zdGFudHNcIjtcbmltcG9ydCB7IElDdXJyZW50TW9udGgsIElDdXJyZW50TW9udGhEYXRlcywgSURhdGVQaWNrZXJEYXRhLCBJV2Vla0RheSwgSVNlbGVjdGVkRGF0ZXNDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2RycC1jb25maWcubW9kZWxcIjtcbmltcG9ydCB7IHBhcnNlWm9uZSwgTW9tZW50IH0gZnJvbSBcIm1vbWVudC10aW1lem9uZVwiO1xuaW1wb3J0IHsgZ2V0TW9udGggfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL3RvYXN0XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdHotZHJwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUekRycENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRhdGE6IElEYXRlUGlja2VyRGF0YTtcbiAgcHJpdmF0ZSBwYXJzZVpvbmVJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIHBhcnNlWm9uZSguLi5hcmdzKTtcbiAgfTtcbiAgcHJpdmF0ZSByYXdXZWVrRGF5czogc3RyaW5nW10gPSBbXCJTVU5cIiwgXCJNT05cIiwgXCJUVUVcIiwgXCJXRURcIiwgXCJUSFVcIiwgXCJGUklcIiwgXCJTQVRcIl07XG4gIHdlZWtEYXlzOiBJV2Vla0RheVtdID0gW107XG4gIGN1cnJlbnRNb250aE51bWJlcjogbnVtYmVyO1xuICBjdXJyZW50TW9udGg6IElDdXJyZW50TW9udGg7XG4gIGN1cnJlbnRZZWFyTnVtYmVyOiBudW1iZXI7XG4gIGN1cnJlbnRNb250aERhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICBuZXh0TW9udGhOdW1iZXI6IG51bWJlcjtcbiAgbmV4dE1vbnRoOiBJQ3VycmVudE1vbnRoO1xuICBuZXh0WWVhck51bWJlcjogbnVtYmVyO1xuICBuZXh0TW9udGhEYXRlczogSUN1cnJlbnRNb250aERhdGVzW10gPSBbXTtcbiAgaXNQcmV2aW91c01vbnRoRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNOZXh0TW9udGhEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3Rpb25TdGFydGVkID0gZmFsc2U7XG4gIGxvY2FsU2VsZWN0ZWREYXRlczogSVNlbGVjdGVkRGF0ZXNDb25maWc7XG4gIGlzRGF0ZXNWYWxpZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQ09OVEFJTkVSX0RBVEEpIGRhdGE6IElEYXRlUGlja2VyRGF0YSwgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHRoaXMuZGF0YS5kYXRlcztcbiAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSkge1xuICAgICAgdGhpcy5pc0RhdGVzVmFsaWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhPy5kcENvbmZpZz8udGltZXpvbmUpIHtcbiAgICAgIHRoaXMucGFyc2Vab25lSW5zdGFuY2UgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gcGFyc2Vab25lKC4uLmFyZ3MpLnR6KHRoaXMuZGF0YS5kcENvbmZpZy50aW1lem9uZSk7XG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5tb250aCgpO1xuICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgdGhpcy5jdXJyZW50WWVhck51bWJlciA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKCk7XG4gICAgdGhpcy5uZXh0WWVhck51bWJlciA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5hZGQoMSwgXCJtb250aFwiKS55ZWFyKCk7XG4gICAgdGhpcy53ZWVrRGF5cyA9IHRoaXMucmF3V2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuICAgICAgbGFiZWw6IGAke2RheVswXX0ke2RheS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICBpc0N1cnJlbnREYXk6IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5kYXkoKSA9PT0gaW5kZXhcbiAgICB9KSk7XG4gICAgaWYgKCF0aGlzLmRhdGE/LmRwQ29uZmlnPy5mb3JtYXQpIHtcbiAgICAgIHRoaXMuZGF0YS5kcENvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXRhLmRwQ29uZmlnLFxuICAgICAgICBmb3JtYXQ6IERBVEVfRk9STUFUXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudERhdGVJbnN0YW5jZSgpO1xuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RGF0ZUluc3RhbmNlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgICB0aGlzLm5leHRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyLCB0aGlzLm5leHRZZWFyTnVtYmVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRTdGFydERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5zdGFydERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgIGlmIChzZWxlY3RlZFN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSBzZWxlY3RlZFN0YXJ0RGF0ZS55ZWFyKCk7XG4gICAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikueWVhcigpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSBzZWxlY3RlZFN0YXJ0RGF0ZS5nZXQoXCJtb250aFwiKSAtIDE7XG4gICAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHNlbGVjdGVkU3RhcnREYXRlLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCkgLSAxO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgICB0aGlzLm5leHRNb250aCA9IGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1pbk1heERheXMoKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlcikubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICBpZiAobWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBtaW5EYXRlLmlzU2FtZU9yQWZ0ZXIoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgaWYgKG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWQgPSBtYXhEYXRlLmlzU2FtZU9yQmVmb3JlKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZU1vbnRoKGRpcmVjdGlvbjogXCJORVhUXCIgfCBcIlBSRVZJT1VTXCIpOiB2b2lkIHtcbiAgICBsZXQgdGhpc01vbnRoOiBNb21lbnQgPSBwYXJzZVpvbmUoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICBpZiAoZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwiUFJFVklPVVNcIikge1xuICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSB0aGlzTW9udGgubW9udGgoKTtcbiAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHRoaXNNb250aC5jbG9uZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgaWYgKHRoaXMubmV4dE1vbnRoTnVtYmVyID09PSAwICYmIGRpcmVjdGlvbiA9PT0gXCJQUkVWSU9VU1wiKSB7XG4gICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXItLTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID09PSAxMSAmJiBkaXJlY3Rpb24gPT09IFwiTkVYVFwiKSB7XG4gICAgIHRoaXMubmV4dFllYXJOdW1iZXIrKztcbiAgICB9ZWxzZSBpZiAodGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPT09IDAgJiYgZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKys7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5leHRNb250aE51bWJlciA9PT0gMTEgJiYgZGlyZWN0aW9uID09PSBcIlBSRVZJT1VTXCIpIHtcbiAgICAgdGhpcy5uZXh0WWVhck51bWJlci0tO1xuICAgIH1lbHNle1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gdGhpcy5jdXJyZW50WWVhck51bWJlcjtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRGF0ZXMobW9udGg6IG51bWJlciwgY3VycmVudFllYXJOdW1iZXI6IG51bWJlcik6IElDdXJyZW50TW9udGhEYXRlc1tdIHtcbiAgICBsZXQgZGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdID0gW107XG4gICAgY29uc3QgZGF5c0luTW9udGggPSBwYXJzZVpvbmUoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF5c0luTW9udGgoKTtcbiAgICBmb3IgKGxldCBjdXJyZW50RGF0ZSA9IDE7IGN1cnJlbnREYXRlIDw9IGRheXNJbk1vbnRoOyBjdXJyZW50RGF0ZSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKTtcbiAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGxldCBpc0Rpc2FibGVkRGF5ID0gdGhpcy5kYXRhLmRhdGVzRGlzYWJsZWQuc29tZShkID0+IGQgPT09IGRhdGVTdHJpbmcpO1xuICAgICAgY29uc3QgbWluRGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIGlzRGlzYWJsZWREYXkgPSBtaW5EYXRlLmlzQWZ0ZXIoZGF0ZSwgXCJkYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICBpZiAoIWlzRGlzYWJsZWREYXkgJiYgbWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgaXNEaXNhYmxlZERheSA9IG1heERhdGUuaXNCZWZvcmUoZGF0ZSwgXCJkYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBpc0N1cnJlbnREYXkgPVxuICAgICAgICB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT1cbiAgICAgICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRTdGFydERheSA9XG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uc3RhcnREYXRlID8/IGZhbHNlKSAmJlxuICAgICAgICBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZTtcbiAgICAgIGNvbnN0IGlzQWZ0ZXJTZWxlY3RlZFN0YXJ0RGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoZGF0ZSkuaXNBZnRlcih0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUsIFwiZGF5XCIpO1xuICAgICAgY29uc3QgaXNCZWZvcmVTZWxlY3RlZEVuZERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKGRhdGUpLmlzQmVmb3JlKHBhcnNlWm9uZSh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlKSwgXCJkYXlcIik7XG4gICAgICBjb25zdCBpblJhbmdlRGF5ID1cbiAgICAgICAgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZSA/PyBmYWxzZSkgJiZcbiAgICAgICAgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLmVuZERhdGUgPz8gZmFsc2UpICYmXG4gICAgICAgIGlzQWZ0ZXJTZWxlY3RlZFN0YXJ0RGF0ZSAmJlxuICAgICAgICBpc0JlZm9yZVNlbGVjdGVkRW5kRGF0ZTtcblxuICAgICAgY29uc3QgaXNTZWxlY3RlZEVuZERheSA9XG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgICgodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uZW5kRGF0ZSkgPz8gZmFsc2UpICYmXG4gICAgICAgIGRhdGUuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpID09PSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uZW5kRGF0ZTtcbiAgICAgIGRhdGVzLnB1c2goe1xuICAgICAgICBkYXRlOiBjdXJyZW50RGF0ZSxcbiAgICAgICAgd2Vla0RheTogZGF0ZS5kYXkoKSxcbiAgICAgICAgaXNDdXJyZW50RGF5LFxuICAgICAgICBpc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgIGlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgIGluUmFuZ2VEYXksXG4gICAgICAgIHRvYXN0TWVzc2FnZTogdGhpcy5kYXRhLm1lc3NhZ2VzLmZpbmQocSA9PiBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT0gcS5kYXRlKT8ubWVzc2FnZSB8fCBcIlwiLFxuICAgICAgICBpc0Rpc2FibGVkRGF5XG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGRhdGVzWzBdLndlZWtEYXk7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGRhdGVzLnVuc2hpZnQoeyBkYXRlOiAwLCB3ZWVrRGF5OiBpIC0gMSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgc2VsZWN0RGF5KGZyb206IFwiTEVGVFwiIHwgXCJSSUdIVFwiLCBkYXk6IElDdXJyZW50TW9udGhEYXRlcykge1xuICAgIGlmIChkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gICAgaWYgKCFkYXkuaXNEaXNhYmxlZERheSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhcnRlZCkge1xuICAgICAgICBjb25zdCBtb21lbnREYXkgPSBwYXJzZVpvbmUoKVxuICAgICAgICAgIC55ZWFyKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50WWVhck51bWJlciA6IHRoaXMubmV4dFllYXJOdW1iZXIpXG4gICAgICAgICAgLm1vbnRoKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgOiB0aGlzLm5leHRNb250aE51bWJlcilcbiAgICAgICAgICAuZGF0ZShkYXkuZGF0ZSk7XG4gICAgICAgIGlmIChtb21lbnREYXkuaXNCZWZvcmUodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlLCBcImRheVwiKSkge1xuICAgICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzID0ge1xuICAgICAgICAgICAgc3RhcnREYXRlOiBtb21lbnREYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpLFxuICAgICAgICAgICAgZW5kRGF0ZTogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgICAgICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHtcbiAgICAgICAgICAuLi50aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyxcbiAgICAgICAgICBlbmREYXRlOiBtb21lbnREYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHtcbiAgICAgICAgICBzdGFydERhdGU6IHBhcnNlWm9uZSgpXG4gICAgICAgICAgICAueWVhcihmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudFllYXJOdW1iZXIgOiB0aGlzLm5leHRZZWFyTnVtYmVyKVxuICAgICAgICAgICAgLm1vbnRoKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgOiB0aGlzLm5leHRNb250aE51bWJlcilcbiAgICAgICAgICAgIC5kYXRlKGRheS5kYXRlKVxuICAgICAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSxcbiAgICAgICAgICBlbmREYXRlOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKTtcbiAgICAgIHRoaXMubmV4dE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIsIHRoaXMubmV4dFllYXJOdW1iZXIpO1xuICAgICAgdGhpcy5pc0RhdGVzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSkge1xuICAgICAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXkudG9hc3RNZXNzYWdlKSB7XG4gICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgfVxuICB9XG4gIGFwcGx5RGF0ZXMoKSB7XG4gICAgdGhpcy5kYXRhLmRhdGVDaGFuZ2UodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMpO1xuICB9XG4gIGNhbmNlbERhdGVQaWNrZXIoKSB7XG4gICAgdGhpcy5kYXRhLmNsb3NlKCk7XG4gIH1cbn1cbiJdfQ==